Иногда проблемы настолько сложны. Вам нужны классы, чтобы абстрагировать часть решения. Тем не менее, в довольно редких случаях эта часть (представленная как класс или несколько из них) не является отступной для потребления внешним миром, она просто служит для конкретной точной потребности. В таком случае идеальным будет сделать такой класс закрытым: он поддерживает чистоту и порядок в ваших пространствах имен, предотвращает путаницу и прекрасно передает саму идею о том, что этот патентованный код - не что иное, как вспомогательный механизм для определенной проблемы.
Боролся и с этим. Для выпадающего списка я делаю следующее:
AppendDataBoundItems="true"
<asp:ListItem Text="" Value=""></asp:ListItem>
Для моего ObjectDataSource, даже если мой UpdateMethod принимает единственный параметр, объект, я добавляю параметры обновления для каждого Nullable поля объекта с преобразованием в 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>
<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.