FormView ConvertEmptyStringToNull и привязка - PullRequest
5 голосов
/ 16 апреля 2009

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

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

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

Ответы [ 4 ]

6 голосов
/ 25 сентября 2009

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

AppendDataBoundItems="true"


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

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

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

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

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

2 голосов
/ 16 апреля 2009

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

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;
        }
    }
}
1 голос
/ 02 февраля 2010

Цитата: Тонио - я не использую отдельные параметры, но вместо этого 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);
     }
  }

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

1 голос
/ 24 апреля 2009

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

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