【问题标题】:Populate DropdownList based upon other DropDownList VB根据其他 DropDownList VB 填充 DropdownList
【发布时间】:2009-06-01 20:03:43
【问题描述】:

我在互联网上找到了几个例子来做到这一点,但真的很难让它在 VB 中工作。 (尝试了转换器,但结果好坏参半)

我需要根据第一个下拉列表中的不同值填充下拉列表的选择选项。

任何人都可以在 VB 中提供一个相关的简单示例吗?如果脚本中的值是“硬编码”的,则不会大惊小怪。或从表中提取数据的 SQL 位

提前致谢!

【问题讨论】:

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


【解决方案1】:

这样做的方式是在第一个下拉列表的 SelectedIndexChanged 事件中填充第二个下拉列表

Example

Protected Sub ddlCountry_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs)
    Dim CountryID As Integer = Convert.ToInt32(ddlCountry.SelectedValue.ToString())
    FillStates(CountryID)
End Sub


Private Sub FillStates(ByVal countryID As Integer)
  Dim strConn As String = ConfigurationManager.ConnectionStrings("DatabaseConnectionString").ConnectionString
  Dim con As New SqlConnection(strConn)
  Dim cmd As New SqlCommand()
  cmd.Connection = con
  cmd.CommandType = CommandType.Text
  cmd.CommandText = "Select StateID, State from State where CountryID =@CountryID"
  cmd.Parameters.AddWithValue("@CountryID", countryID)
  Dim objDs As New DataSet()
  Dim dAdapter As New SqlDataAdapter()
  dAdapter.SelectCommand = cmd
  con.Open()
  dAdapter.Fill(objDs)
  con.Close()
  If objDs.Tables(0).Rows.Count > 0 Then
    ddlState.DataSource = objDs.Tables(0)
    ddlState.DataTextField = "State"
    ddlState.DataValueField = "StateID"
    ddlState.DataBind()
    ddlState.Items.Insert(0, "--Select--")
  Else
    lblMsg.Text = "No states found"
  End If
 End Sub

html 源代码如下:

   <asp:DropDownList ID="ddlState" runat="server" AutoPostBack="True">
  </asp:DropDownList>

  <asp:DropDownList ID="ddlCountry" runat="server" 
  AutoPostBack="True" OnSelectedIndexChanged="ddlCountry_SelectedIndexChanged">
 </asp:DropDownList>

【讨论】:

    【解决方案2】:

    您可以像这样在 ASPX 页面中以声明方式完成此操作:

    <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:myConnString %>" SelectCommand="SELECT id, name FROM planets"></asp:SqlDataSource>
    <asp:DropDownList ID="ddlPlanets" AutoPostBack="true" DataTextField="name" DataValueField="id" DataSourceID="SqlDataSource1" runat="server" AppendDataBoundItems="true" />
    
    <asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:myConnString %>" SelectCommand="SELECT planetid, name FROM moons" FilterExpression="planetid = '{0}'">
        <FilterParameters>
            <asp:ControlParameter Name="planetid" ControlID="ddlPlanets" PropertyName="SelectedValue" />
        </FilterParameters>
    </asp:SqlDataSource>      
    <asp:DropDownList ID="ddlMoons" DataTextField="name" DataValueField="planetid" DataSourceID="SqlDataSource2" runat="server" />
    

    【讨论】:

      【解决方案3】:

      您最好的选择是在第一个 dropdownlist 上捕获 SelectedIndexChanged 事件,检查该 dropdownlist 的当前值是多少,然后使用它来清除然后填充第二个下拉列表中的项目。这样做时,请记住将第一个 DropDownList 的 AutoPostBack 属性设置为 "true"

      【讨论】:

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