如何从第二个ComboBox填充选择更改的ComboBox

时间:2012-01-15 13:38:36

标签: vb.net

我有两个组合框,一个是CountryCombo,第二个是StateCombo。

我想要的是当我点击国家/地区组合并选择一个国家/地区时,该国家/地区应该在州组合中填充。

我尝试了很多很多东西,但没有任何效果。以下是我的CountryCombo如何填补的代码。

query="select CountryName from CountryMaster"

if dr.hasRows()
{
  while dr.read()
  {
    countrycombo.items.add(dr(0)
  }
}

3 个答案:

答案 0 :(得分:2)

试试这段代码:

    Dim dt As New DataTable
    Dim cm1, cm2 As New DataColumn
    cm1.ColumnName = "CountryName"
    cm1.DataType = GetType(String)
    cm2.ColumnName = "CountryID"
    cm2.DataType = GetType(String) 'or integer
    dt.Columns.Add(cm1)
    dt.Columns.Add(cm2)
    'contry = here select your data

    Dim dr As DataRow
    dr = dt.NewRow
    dr(0) = "Select One"
    dr(1) = "-1"
    dt.Rows.Add(dr)
    For Each item In contry
        dr = dt.NewRow
        dr(0) = item.CountryName
        dr(1) = item.CountryID
        dt.Rows.Add(dr)
    Next

    Drp.DataSource = dt
    Drp.DataTextField = "CountryName"
    Drp.DataValueField = "CountryID"
    Drp.DataBind()

使用此代码,您可以填写下拉列表。您可以像这样编写sub并将其放在此下拉列表的选定更改上。玩得开心!
添加此部分,并确保如果其网络表单在后续列表中回发。

Protected Sub Drpcountry_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles Drpcountry.SelectedIndexChanged
    Dim db as new linqdatacontext 
    Dim dt As New DataTable
    Dim cm1, cm2 As New DataColumn
    cm1.ColumnName = "stateName"
    cm1.DataType = GetType(String)
    cm2.ColumnName = "stateID"
    cm2.DataType = GetType(String) 'or integer
    dt.Columns.Add(cm1)
    dt.Columns.Add(cm2)
    Dim stateslist = From i in db.tb_states where i.countryid = drpcountry.selectedvalue select i

    Dim dr As DataRow
    dr = dt.NewRow
    dr(0) = "Select One"
    dr(1) = "-1"
    dt.Rows.Add(dr)
    For Each item In stateslist 
        dr = dt.NewRow
        dr(0) = item.stateName
        dr(1) = item.stateID
        dt.Rows.Add(dr)
    Next

    Drpstate.DataSource = dt
    Drpstate.DataTextField = "stateName"
    Drpstate.DataValueField = "stateID"
    Drpstate.DataBind()
End Sub

答案 1 :(得分:2)

请检查以下代码,并在发布问题之前做一些功课。

    Private Sub countryCombo_SelectedValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ComboBox1.SelectedValueChanged
    Dim query As String
    query = "select StateName from StateMaster where CountryId='" & countryCombo.SelectedValue & "'"

    if dr.hasRows()
    {
         while dr.read()
          {
              Statecombo.items.add(dr(0))
          }
    }
    End Sub

这将填写您的Statecombo关于countryCombo的选择更改。

答案 2 :(得分:0)

您显示的代码是填充CountryCombo的(不完整)代码:请分享填写StateCombo新代码的代码,因为这部分会导致您出现问题。

无论如何你应该避免直接操纵ComBoBox项,而是你应该将两个Combo绑定到ObservableCollection,比如

 Public Property CountryCollection as New ObservableCollection(Of Country) 

 Public Property StateCollection As New ObservableCollection(Of State). 

对于Country和State对象,重载ToString()sub以显示国家/州名称 在Combos中。

现在用您的国家填充CountryCollection,并在CountryCombo的SelectionChanged上检索状态列表(=具有CountryCombo.SelectedItem.CountryID作为CountryID的状态),然后用此查询结果填充StateCollection(Clear()然后添加())。

逐步测试:使用BreakPoints / Debugger检查您的国家/地区查询是否返回了良好的结果。如果绑定到ObservableCollection,则查询现在应该是唯一的问题。