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最終的にfor each childを作成し、dropdownlistそれを必要な値にバインドしました。ジェネリックを作成して、目的の結果でindexchange handler更新しました。hiddenfeildこれにより、バインドされたフィールドがデータソースによって更新されなくなります (最初に問題を引き起こした rebind システム コールを回避します)。

これが最善の解決策かどうかはわかりませんが、ほとんどの場合にうまくいくはずです。

于 2012-12-07T20:16:25.833 に答える