好吧,我放棄了,我需要你的幫助。我認爲這很簡單!Databound Child Master Dropdownlist
在這種情況下,部門屬於機構。在我的SQL數據庫中,它是一對多的關係。人屬於部門和機構。我正在編寫一個頁面,允許編輯個人詳細信息,其所屬部門根據其所屬機構進行限制。例如,如果人力資源部門是機構A的一部分,財務部門是機構B的一部分,如果人員在機構A中,除非您先將其移至機構B,否則他們不能屬於財務部門。
I在FormView中有兩個下拉列表來編輯個人的詳細信息 - ddlEditInstitution
和ddlEditDepartment
。很簡單,當FormView首先進入編輯模式時,我希望這兩個下拉列表顯示當前所屬的機構和部門。如果您單擊部門下拉列表,您將只能從屬於該機構的部門中進行選擇。如果您更改了ddlInstitution
中的機構,則ddlDepartment
中的可用選項應刷新爲僅顯示屬於新選機構的部門。
對,有些代碼。這是我的加價爲dropdownlists:
<tr>
<td class="fieldlabel">Institution</td>
<td><asp:DropDownList ID="ddlEditInstitution" runat="server" DataTextField="Name" DataValueField="ID" DataSourceID="SQLInstitution" SelectedValue='<%# Bind("InstitutionID")%>' CssClass="contactdetailseditfield"
AutoPostBack="True" OnSelectedIndexChanged="ddlEditInstitution_SelectedIndexChanged" /></td>
<asp:SqlDataSource ID="SQLInstitution" runat="server" ConnectionString="<%$ ConnectionStrings:ContactsConnectionString %>"
SelectCommand="SELECT * FROM [Institution] WHERE ([Deleted] = 0)" />
</tr>
<tr>
<td class="fieldlabel">Department</td>
<td><asp:UpdatePanel ID="upDepartment" runat="server" UpdateMode="conditional">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="ddlEditInstitution" EventName="SelectedIndexChanged" />
</Triggers>
<ContentTemplate>
<asp:DropDownList ID="ddlEditDepartment" runat="server" DataTextField="Name" DataValueField="ID" DataSourceID="SQLDepartment" CssClass="contactdetailseditfield" />
<asp:SqlDataSource ID="SQLDepartment" runat="server" ConnectionString="<%$ ConnectionStrings:ContactsConnectionString %>"
SelectCommand="SELECT * FROM [Department] WHERE ([Deleted] = 0) AND (Institution = @InstitutionID)">
<SelectParameters>
<asp:ControlParameter ControlID="ddlEditInstitution" PropertyName="SelectedValue" Name="InstitutionID" Type="Int32" />
</SelectParameters>
</asp:SqlDataSource>
</ContentTemplate>
</asp:UpdatePanel></td>
</tr>
而這裏的代碼背後:
Protected Sub ddlEditInstitution_SelectedIndexChanged(sender As Object, e As EventArgs)
ddlEditDepartment.SelectedValue = Nothing
ddlEditDepartment.Items.Clear()
ddlEditDepartment.DataBind()
ddlEditDepartment.Items.Insert(0, New ListItem("--Select a department--", "-1"))
ddlEditDepartment.SelectedIndex = 0
End Sub
這種近乎完美的作品。問題是,當FormView第一次進入編輯模式時,ddlEditDepartment
不顯示該人的當前部門,它顯示下拉列表項目中的第一個部門。這是有道理的 - 我沒有設置ddlEditDepartment
的SelectedValue。但是,如果我這樣做(像我一樣原來,當我認爲這將是容易)通過添加屬性ddlEditDepartment
在頁面標記,就像這樣......
SelectedValue = '<%# Bind("DepartmentID")%>'
...那麼會發生什麼情況是,如果從ddlInstitution
中選擇不同的選項,則ddlDepartment
的數據綁定項不會更新。它們仍然是與舊機構相關的選擇。大概這是因爲ddlEditDepartment
的SelectedValue屬性重寫了其他所有內容 - 無論如何,下拉列表都綁定到該列。
我試圖讓周圍這種每哪種方式改變ddlEditInstitution
時,試圖通過設定的ddlEditDepartment
的的SelectedValue代碼背後的人的電流時,系我能想到的,在代碼中手動改變ddlEditDepartment
的的SelectedValue背後FormView首先進入編輯模式,而不是顯式的......但沒有任何效果。
我討厭ASP.NET中的dropdownlists。任何人都可以告訴我如何實現看起來相對簡單的效果?