1

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

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

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

4

1 回答 1

0

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

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

于 2012-12-07T20:16:25.833 回答