W sytuacji, kiedy załadowanie danych do DropDownList w FormView stanowi problem dobrym rozwiązaniem jest podpięcie się pod zdarzenie OnLoad konkretnej kontrolki DropDownList, a następnie tam wypełnienie jej. Np. w następujący sposób:
protected void PeriodDropDownList_Load(object sender, EventArgs e)
{
DropDownList list = (DropDownList)sender;
list.DataSource = EnumsHelper.IntoDictionary(typeof(Period));
list.DataTextField = "Value";
list.DataValueField = "Key";
}
Jeszcze lepszym rozwiązaniem jest wykorzystanie OnDataBinding - zdarzenie wywoływane przed przypięciem danych. Dla OnLoad podczas zagnieżdżania FormView pojawił się problem z nadpisywaniem danych wybranych przez użytkownika.
Pokazywanie postów oznaczonych etykietą dropdownlist. Pokaż wszystkie posty
Pokazywanie postów oznaczonych etykietą dropdownlist. Pokaż wszystkie posty
czwartek, 3 grudnia 2009
środa, 4 listopada 2009
FormView - inserting obiektów, DropDownList, nullable
Przy wstawianiu obiektów, jeżeli jedno z jego pól może być null-em pojawiają się problemy. W moim wypadku było to index out of... Poszukiwania w Google nic nie dały (żadnych konkretnych odpowiedzi).
Znalezione rozwiązanie polega na dodaniu metody OnItemInserting, która zawiera +/- następujący kod:
dodaniu do FormView atrybutu oniteminserting="AddProductFormView_ItemInserting" .
DropDownList powinien wyglądać +/- następująco:
<asp:dropdownlist id="ProductCalculationMethodList" runat="server" selectedvalue='<%# Bind("CalculationMethodId") %>' DataSourceID="CalculationMethodsDataSource" DataTextField="Name" DataValueField="Id" AppendDataBoundItems="true" Width="100%">
<asp:listitem selected="True" text="" value="-1"></asp:listitem>
</asp:DropDownList>
Elementy istotne zaznaczone kolorem czerwonym :-)
Znalezione rozwiązanie polega na dodaniu metody OnItemInserting, która zawiera +/- następujący kod:
protected void AddProductFormView_ItemInserting(object sender, FormViewInsertEventArgs e)
{
if (e.Values["CalculationMethodId"] == "-1")
e.Values["CalculationMethodId"] = null;
}
{
if (e.Values["CalculationMethodId"] == "-1")
e.Values["CalculationMethodId"] = null;
}
dodaniu do FormView atrybutu oniteminserting="AddProductFormView_ItemInserting" .
DropDownList powinien wyglądać +/- następująco:
<asp:dropdownlist id="ProductCalculationMethodList" runat="server" selectedvalue='<%# Bind("CalculationMethodId") %>' DataSourceID="CalculationMethodsDataSource" DataTextField="Name" DataValueField="Id" AppendDataBoundItems="true" Width="100%">
<asp:listitem selected="True" text="" value="-1"></asp:listitem>
</asp:DropDownList>
Elementy istotne zaznaczone kolorem czerwonym :-)
Subskrybuj:
Posty (Atom)