0

在这里寻找一些见解...

在我的表单上,我有三个 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!)

在战略点删除和添加事件处理程序使我的代码按我想要/期望的方式工作。

是使我走上正确道路的文章...

4

2 回答 2

0

在您的第二个和第三个组合框尝试清除 .Text/.SelectedText 属性,然后再设置 .DataTable

组合框可能太有用了,并假设当您第二次设置 .DataTable 时,您希望所选项目与您的 .Text 属性匹配。

于 2013-02-07T00:58:26.737 回答
0

我最终使用 AddHandler 和 RemoveHandler 来防止在填充组合框时发生连锁触发事件。

于 2013-02-25T02:53:42.887 回答