【问题标题】:Asp.net - Creating 2 linked Drop Down Lists from DatabaseAsp.net - 从数据库创建 2 个链接的下拉列表
【发布时间】:2009-08-20 18:24:30
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案1】:

    您已隐藏您的状态控制,并且您的 Country 下拉列表中的 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
    

    【讨论】:

    • 这需要回发和页面或更新重新加载,对吗?
    • 是的,它需要回发,或者被包装在 Ajax Toolkit UpdatePanel 中以使其看起来无缝。
    【解决方案2】:

    这将需要以下两项之一:

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

    【讨论】:

    • 你能详细说明如何做#2吗?我可以使用 js,但我宁愿从数据库中填充字段,因为将来可能需要这样做。
    • 使用 JS 和从数据库中填充不是单独的选项。如果您愿意,可以使用数据库内容创建一些动态 javascript。 #2在databyss的答案中得到了更好的描述。
    【解决方案3】:

    如果您不反对使用 Microsoft Ajax Control Toolkit,他们有一个名为 Cascading Dropdown 的控件可以满足您的需求。

    【讨论】:

      【解决方案4】:

      我最终使用了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>
      

      【讨论】:

        猜你喜欢
        • 2018-01-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多