如何在ASP.NET中绑定依赖的下拉列表

时间:2012-11-27 23:23:05

标签: asp.net data-binding

我需要一种方法来绑定基于父节点填充的多个下拉列表。

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())只能在数据绑定控件的上下文中使用。

这个问题的解决方案是否需要我添加事件(多个)处理程序?

1 个答案:

答案 0 :(得分:0)

我最终为每个孩子hiddenfield创建一个dropdownlist,然后我绑定了我需要的值。我创建了一个通用indexchange handler,然后使用所需的结果更新hiddenfeild。这导致绑定字段不被数据源更新(避免首先导致问题的重新绑定系统调用)。

不确定这是否是最佳解决方案,但它适用于大多数情况。