FormView ConvertEmptyStringToNull и привязка

Иногда проблемы настолько сложны. Вам нужны классы, чтобы абстрагировать часть решения. Тем не менее, в довольно редких случаях эта часть (представленная как класс или несколько из них) не является отступной для потребления внешним миром, она просто служит для конкретной точной потребности. В таком случае идеальным будет сделать такой класс закрытым: он поддерживает чистоту и порядок в ваших пространствах имен, предотвращает путаницу и прекрасно передает саму идею о том, что этот патентованный код - не что иное, как вспомогательный механизм для определенной проблемы.

5
задан Scott Ivey 16 April 2009 в 04:08
поделиться

4 ответа

Боролся и с этим. Для выпадающего списка я делаю следующее:

AppendDataBoundItems="true"


<asp:ListItem Text="" Value=""></asp:ListItem>

Для моего ObjectDataSource, даже если мой UpdateMethod принимает единственный параметр, объект, я добавляю параметры обновления для каждого Nullable поля объекта с преобразованием в NULL

<UpdateParameters>
    <asp:Parameter Name="No_Empl_Ferme" Type="Int32" ConvertEmptyStringToNull="true" />
</UpdateParameters>

Я делаю то же самое для Вставка.

Работает нормально.

6
ответ дан 13 December 2019 в 22:16
поделиться

Я закончил тем, что делал это - вид дробовика, но в этом случае все из мои пустые строковые значения должны быть нулевыми. Я также рассмотрел возможность использования строкового массива в коде, чтобы указать, какие значения следует обнулять, а затем можно просто зацикливаться на массиве строк вместо всех значений.

protected void RequestItemFormView_ItemInserting(object sender, FormViewInsertEventArgs e)
{
    for (int i = 0; i < e.Values.Count - 1; i++)
    {
        if (e.Values[i].ToString() == string.Empty)
        {
            e.Values[i] = null;
        }
    }
}
2
ответ дан 13 December 2019 в 22:16
поделиться

В вашем объектном источнике данных вам нужно добавить InsertParameters для каждого вашего типа, допускающего значение NULL, с помощью атрибута ConvertEmtpyStringToNull = "True":

<InsertParameters>
   <asp:Parameter Name="NullableFieldName" Type="Int32" ConvertEmptyStringToNull="true"  />            
</InsertParameters>
1
ответ дан 13 December 2019 в 22:16
поделиться
<div class="logo">
    <h1><a href="index.html"><span>Insert Website Name</span></a></h1>
    <p>Insert Slogan Here</p>
</div>
#header .logo h1 {
    background: red; /* replace with image of logo */
    display:block;
    height:40px; /* image height */
    width:220px; /* image width */
}

#header .logo h1 a {
    display:block;
    height:40px; /* image height */
    width:220px; /* image width */
}

#header .logo h1 a span {
    display:none;
}
-121--586082-

Если вы хотите обрабатывать только сообщения о краске и ничего другого: используйте вместо приложения следующее. ProcessMessages:

procedure ProcessPaintMessages;
var
  Msg: TMsg;
  i: Integer;
begin
  i := 0;
  repeat
    if Windows.PeekMessage(Msg, 0, 0, 0, PM_REMOVE or (QS_PAINT shl 16)) then begin
      TranslateMessage(Msg);
      DispatchMessage(Msg);
    end else Break;
    Inc(i);
  until i > 1000; // Breakout if we are in a paint only loop!
end;
-121--4667656-

Цитата: Tonio - я использую не отдельные параметры, а DataObjectTypeName. Мой метод вставки принимает один параметр, и это бизнес-объект, который я хочу сохранить обратно в базу данных. - Скотт Айви Мэй 1 в 12:57

Я исправил это так:

 protected void FormViewSettings_ItemUpdating(object sender, FormViewUpdateEventArgs e)
  {
     OrderedDictionary values = e.NewValues as OrderedDictionary;

     var personID = values["PersonID"];

     if (string.IsNullOrEmpty(personID.ToString()))
     {
        values.Remove("PersonID");
        values.Add("PersonID", null);
     }
  }

Это небольшой взлом, но это работает нормально. Таким образом, свойство object можно установить равным null, а не string.empty без использования настройки ConvertEmpiveStringToNull.

1
ответ дан 13 December 2019 в 22:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: