Asp.net - 从数据库创建2个链接的下拉列表

时间:2009-08-20 18:24:31

标签: asp.net database drop-down-menu

我有2个链接的数据库表(类似于Country - > State) - 如何使用这些表动态填充2个下拉列表,以便:

如果我选择一个国家/地区,则只有该国家/地区的州显示在第二个下拉列表中?

更新: 这个页面似乎有一个解决方案 - > Populate DropdownList based upon other DropDownList VB - >在aspx页面本身使用SQL数据连接的那个,数据绑定下拉列表 - 如何使用LINQ执行此操作?我想我可以从这里弄清楚。

4 个答案:

答案 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)

这将需要两件事之一:

  1. 非平凡的JavaScript。 (使用JQuery更容易。提供一组将状态与国家/地区相关联的数据,并在每次用户选择新国家时使用JavaScript创建/填充列表。
  2. 来自服务器的大量来回通信。 (每次用户选择一个国家/地区时,都会向服务器请求新的状态列表,并使用AJAX更新状态下拉列表。)

答案 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>