在这里寻找一些见解......
在我的表单上,我有三个ComboBox控件。当最左边接收一个选择时,它调用一个例程来启用并填充第二个,然后在第二个选择时第三个发生同样的事情。
Private Sub cboEquipment_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles cboEquipment.SelectedIndexChanged
Me.transData.isMobile = If(Me.cboEquipment.Text = MOBIEQIP, 1, 0)
If cboMembership.Enabled = False Then
Me.cboMembership.Enabled = True
End If
Call loadGroups()
End Sub
方法'loadGroups'
Private Sub loadGroups()
Dim cn As New SqlConnection(My.Settings.MyConnectionString)
Dim cm As New SqlCommand("SELECT ... ORDER BY codeHumanName ASC", cn)
Dim ta As New SqlDataAdapter(cm)
Dim dt As New DataTable
Me.cboMembership.DataSource = Nothing
Me.cboMembership.Items.Clear()
Me.transData.membership = Nothing
cn.Open()
ta.Fill(dt)
With Me.cboMembership
.DataSource = dt
.DisplayMember = "codeHumanName"
.ValueMember = "codeID"
End With
cn.Close()
End Sub
这样做很好,一切都应该加载,并提供适当的.ValueMember结果。
我应该提一下,当Form首次加载时,框2和3为空并禁用。在初始加载后,我必须从列表中选择一个项来获取值(如预期的那样)。
奇怪的是,一旦第二个或第三个Combobox被'初始化',它们似乎回想起最后的设置。例如,如果我调用Reset方法,它将.DataSource属性设置为Nothing,清除列表,并将Text设置为Nothing;下次我在cboEquipment上更改SelectedIndex时,其他框将重新使用SelectedItems和SelectedValues。
根据新的DataTable,这些值没有错,但奇怪的是它们完全记不住(它们不应该有任何引用,并且表现为新的负载)。
其他兴趣点;在SelectedIndexChanged事件期间调用populate方法。
任何想法都会很棒!
更新 -
此行为与SelectedIndexChange事件相关联(raise!raise!raise!)
在战略要点删除和添加事件处理程序,我的代码可以正常运行。
Here是让我走上正确道路的文章......
答案 0 :(得分:0)
在第二个和第三个组合框上尝试清除.Text / .SelectedText属性,然后再设置.DataTable
组合框可能只是太有用了,并假设当你第二次设置.DataTable时,你希望所选项与你的.Text属性相匹配。
答案 1 :(得分:0)
我最终使用AddHandler和RemoveHandler来防止链接触发事件,因为正在填充组合框。