我有2个链接的数据库表(类似于Country - > State) - 如何使用这些表动态填充2个下拉列表,以便:
如果我选择一个国家/地区,则只有该国家/地区的州显示在第二个下拉列表中?
更新: 这个页面似乎有一个解决方案 - > Populate DropdownList based upon other DropDownList VB - >在aspx页面本身使用SQL数据连接的那个,数据绑定下拉列表 - 如何使用LINQ执行此操作?我想我可以从这里弄清楚。
答案 0 :(得分:2)
您的状态控件已隐藏,并且您的国家/地区下拉列表中的autopostback = true。
在SelectedIndexChanged上,您拉取该值并使用该值查询数据库,然后将状态下拉列表设置为可见。
在ASPX页面中:
<asp:DropDownList ID="CountryDD" runat="server" AutoPostBack="true" OnSelectedIndexChanged="CountryDD_IndexChanged" />
<asp:DropDownList ID="StateDD" runat="server" Visible="false"/>
在守则背后:
Protected Sub CountryDD_IndexChanged(ByVal sender As Object, ByVal e As EventArgs)
StateDD.Items.Clear()
Using conn As SqlConnection = New SqlConnection("Connection String")
conn.Open()
Using cmd As SqlCommand = New SqlCommand("get_states_by_country", conn)
cmd.CommandType = CommandType.StoredProcedure
cmd.Parameters.AddWithValue("@country_id", CountryDD.SelectedValue)
Using dr As SqlDataReader = cmd.ExecuteReader()
StateDD.Items.Add(New ListItem(dr("state_name").ToString(), dr("state_id")))
End Using
End Using
End Using
End Sub
答案 1 :(得分:1)
这将需要两件事之一:
答案 2 :(得分:1)
如果您不反对使用Microsoft Ajax Control Toolkit,则会有一个名为Cascading Dropdown的控件,可以执行您想要的操作。
答案 3 :(得分:0)
我最终使用Populate DropdownList based upon other DropDownList VB上的一个答案 - 我将2个下拉列表放在AJAX更新面板中。这与databyss的答案相同,除了它在页面定义本身中使用数据绑定,不需要后端代码。
代码:
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:DropDownList ID="DropDownList1" runat="server"
DataSourceID="Countries" DataTextField="Name" DataValueField="Id"
AutoPostBack="true"
/>
<asp:LinqDataSource ID="Countries" runat="server"
ContextTypeName="YourDataContext"
Select="new (Id, Name)" TableName="AssessmentTypes">
</asp:LinqDataSource>
<asp:DropDownList ID="DropDownList2" runat="server"
DataSourceID="States" DataTextField="Name" DataValueField="Id"
/>
<asp:LinqDataSource ID="States" runat="server"
ContextTypeName="YourDataContext"
Select="new (Id, Name, CountryId)" TableName="Modules"
Where="CountryId == @CountryId">
<WhereParameters>
<asp:ControlParameter ControlID="DropDownList1" DbType="Guid"
Name="CountryId" PropertyName="SelectedValue" />
</WhereParameters>
</asp:LinqDataSource>
</ContentTemplate>
</asp:UpdatePanel>