Tengo 2 DropDownList
controles en mi formulario, el segundo de los cuales usa el SelectedValue
del primero como uno de sus parámetros de enlace.Implementando el enlace DropDownList en cascada en un control de plantilla
Tanto DropDownList
controles están en un FormView.InsertItemTemplate
con SelectedValue
propiedades unidos a la fuente de datos la FormView
's utilizando una expresión de enlace.
La primera vez que el FormView
se renderiza en modo Insertar, todo funciona bien. El problema es después de un AutoPostBack
desde el primer DropDownList
, el FormView
no se vuelve a vincular, sin embargo, dado que el ControlParameter
en el segundo DropDownList
ha cambiado, SÍ se enlaza (como estaba previsto), pero se produce una excepción en la Expresión vinculante de la segunda DDL, asumo desde la FormView
no es vinculante para que pase:
System.InvalidOperationException: métodos de enlace de datos tales como Eval(), XPath(), y bind() sólo se pueden utilizar en el contexto de un control de datos .
Aquí es el marcado:
<InsertItemTemplate>
.
.
.
<tr class="GridViewRowB">
<td class="GridViewCell">
Offense Type
</td>
<td class="GridViewCell">
<asp:DropDownList ID="ddlOffenseType" runat="server" DataSourceID="dsOffenseType"
AutoPostBack="true" DataValueField="OffenseTypeID" DataTextField="Description"
SelectedValue='<%# Bind("OffenseTypeID") %>'>
</asp:DropDownList>
<asp:ObjectDataSource ID="dsOffenseType" runat="server" TypeName="OffenseType"
SelectMethod="GetAll">
<SelectParameters>
<asp:Parameter Name="ActiveOnly" DefaultValue="True" Type="Boolean" />
</SelectParameters>
</asp:ObjectDataSource>
</td>
</tr>
<tr class="GridViewRowA">
<td class="GridViewCell">
Attorney
</td>
<td class="GridViewCell">
<asp:DropDownList ID="ddlAttorney" runat="server" DataSourceID="dsAttorney" DataValueField="AttorneyID"
DataTextField="AttorneyNameWithCount" SelectedValue='<%# Bind("AttorneyID") %>'>
</asp:DropDownList>
<asp:ObjectDataSource ID="dsAttorney" runat="server" TypeName="Attorney"
SelectMethod="GetAttorneyWithCaseCount">
<SelectParameters>
<asp:Parameter Name="ActiveOnly" DefaultValue="True" Type="Boolean" />
<asp:ControlParameter Name="OffenseTypeID" Type="Int32" ControlID="ddlOffenseType"
PropertyName="SelectedValue" />
</SelectParameters>
</asp:ObjectDataSource>
</td>
</tr>
.
.
.
</InsertItemTemplate>
Mi pregunta es: ¿Cuál es la mejor manera de hacer este trabajo funcionalidad? ¿Es posible mantener ambos DDL dentro de la plantilla? Preferiría evitar el uso del kit de herramientas AJAX u otras soluciones del lado del cliente.
bien así .... entonces yo tendría que manejar 'FormView .ItemInserting' y agrega el parámetro en forma manual? ¿Qué pasa con el mismo problema en el modo 'Editar'? ¿Maneja los valores inicial y actualizado manualmente? El código de ejemplo para la posteridad sería apreciado. – pseudocoder
yah, exactamente. tienes que hacer lo mismo para editar también. –
Comprobé que esta solución funciona. ¡Gracias! Tenía algunas ideas similares a esta, pero no estaba seguro de cómo la mayoría de las personas abordan el problema. – pseudocoder