combobox召回以前的数据源

时间:2013-02-07 00:44:27

标签: vb.net winforms combobox datasource valuemember

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

在我的表单上,我有三个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是让我走上正确道路的文章......

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

我最终使用AddHandler和RemoveHandler来防止链接触发事件,因为正在填充组合框。