在这里寻找一些见解...
在我的表单上,我有三个 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 结果。
我应该提到,当表单第一次加载时,框 2 和 3 是空的并且被禁用。在初始加载之后,我必须从列表中选择一个项目来获取值(如预期的那样)。
奇怪的是,一旦第二个或第三个组合框被“初始化”,它们似乎会回忆起最后的设置。例如,如果我调用 Reset 方法,该方法将 .DataSource 属性设置为 Nothing,请清除列表并将 Text 设置为 Nothing;下次我更改 cboEquipment 上的 SelectedIndex 时,其他框会通过 SelectedItems 和 SelectedValues 恢复活力。
根据新的 DataTable,这些值并没有错,但奇怪的是它们完全记得(它们不应该有任何引用,并且表现为新负载)。
其他兴趣点;在 SelectedIndexChanged 事件期间调用填充方法。
任何想法都会很棒!
更新 -
此行为与 SelectedIndexChange 事件相关联(raise!raise!raise!)
在战略点删除和添加事件处理程序使我的代码按我想要/期望的方式工作。
这是使我走上正确道路的文章...