我需要一种方法来绑定基于父节点填充的多个下拉列表。
RootDDL <- child <- grandchild[]
代码与
类似<FormView DataSoureceID="rootDatasource">
<DropDownList ID="RootDLL" AutoPostBack="true">
<!--items-->
</DropDownList>
<DropDownList ID="child" AutoPostBack="true" DataSourceID="ChildDataSource" />
<SqlDataSource ID="ChildDataSource" />
<DropDownList ID="grandchild" DataSourceID="GrandChildDataSource" SelectedValue='<%# Bind('SomeFieldInRootDatasource') %>' />
<SqlDataSource ID="GrandChildDataSource">
<SelectParameters>
<ControlParameter ControlID="child" PropertyName="SelectedValue" />
</SelectParameters>
</SqlDataSource>
<Button Command="Update" />
</FormView>
<SqlDataSource ID="rootDatasource">
<InsertParameters>
<asp:Parameter Name="SomeFieldInRootDatasource" />
</InsertParameters>
<UpdateParameters>
<asp:Parameter Name="SomeFieldInRootDatasource" />
</UpdateParamters>
</SqlDataSource>
更改rootDDL的工作原理很不幸,当Child selectedvalue更改了大子<%# Bind %>
尝试重新绑定但不能,因为FormView不再作为容器。
失败了
数据绑定方法(如Eval(),XPath()和Bind())只能在数据绑定控件的上下文中使用。
这个问题的解决方案是否需要我添加事件(多个)处理程序?
答案 0 :(得分:0)
我最终为每个孩子hiddenfield
创建一个dropdownlist
,然后我绑定了我需要的值。我创建了一个通用indexchange handler
,然后使用所需的结果更新hiddenfeild
。这导致绑定字段不被数据源更新(避免首先导致问题的重新绑定系统调用)。
不确定这是否是最佳解决方案,但它适用于大多数情况。