Вопрос

Я использую FormView с ObjectDataSource и привязываюсь с помощью <%# Bind("WhateverProp") %> - и все мои столбцы, допускающие значение NULL, возвращаются со значениями типа по умолчанию.

Похоже, что у объекта FormView нет свойства ConvertEmtpyStringToNull, как у других контейнеров привязки.Я нашел статьи, предполагающие, что это была ошибка в VS 2005/.Net 2.0, но не вижу никаких указаний на то, какое было разрешение.

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

Это было полезно?

Решение

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

AppendDataBoundItems="true"


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

Для моего ObjectDataSource, хотя мой UpdateMethod принимает один параметр, сущность, я добавляю параметры обновления для каждого поля, допускающего значение NULL, с преобразованием в NULL.

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

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

Работает отлично.

Другие советы

В итоге я поступил вот так — своего рода дробовик, но в данном случае все мои пустые строковые значения должны быть нулевыми.Я также рассматривал возможность использования массива строк в коде, чтобы указать, какие значения должны быть обнулены, а затем мог бы просто перебирать массив строк, а не перебирать все значения.

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;
        }
    }
}

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

<InsertParameters>
   <asp:Parameter Name="NullableFieldName" Type="Int32" ConvertEmptyStringToNull="true"  />            
</InsertParameters>

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

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

 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);
     }
  }

Это небольшой хак, но он работает нормально.Таким образом, вы можете установить для свойства объекта значение null вместо string.empty без использования параметра ConvertEmptyStringToNull.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top