2012-11-27 69 views
1

我需要綁定多個下拉是基於他們的父節點上填充列表的方式。如何綁定相關的下拉列表中ASP.NET

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工作,遺憾的是,當孩子的SelectedValue改變了盛大的孩子<%# Bind %>試圖重新綁定,但不能因爲它FormView控件不再起作用作爲容器。

它失敗

數據綁定方法如eval()函數,XPath的(),並綁定()只能在數據綁定控件的上下文中使用。

有沒有解決這個問題,不需要我添加事件(多個)處理程序?

回答

0

我結束了爲每個孩子dropdownlist,我再與我所需要的值約束創建hiddenfield。我創建了一個通用indexchange handler到再更新hiddenfeild與期望的結果。這導致綁定字段沒有被數據源(避免重新綁定系統調用是造成擺在首位的問題)更新。

不知道這是最好的解決方案,但它應該在大多數情況下工作。