FormView ConvertEmptyStringToNull и привязка
-
09-09-2019 - |
Вопрос
Я использую 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.