Vb.net 从绑定的ToolStripComboBox填充TableAdapter

Vb.net 从绑定的ToolStripComboBox填充TableAdapter,vb.net,datasource,tableadapter,toolstripcombobox,Vb.net,Datasource,Tableadapter,Toolstripcombobox,我试图根据ToolStripComboBox中的选择填充TableAdapter。 首先,我想通过将ToolStipComboBox绑定到数据源来填充它。然后,一旦它被填满,我想填充TableAdapter 这是我的代码: Private Sub ToolStripComboBox_MessageType_Click(sender As Object, e As EventArgs) Handles ToolStripComboBox_MessageType.Click Me.ToolS

我试图根据ToolStripComboBox中的选择填充TableAdapter。 首先,我想通过将ToolStipComboBox绑定到数据源来填充它。然后,一旦它被填满,我想填充TableAdapter

这是我的代码:

Private Sub ToolStripComboBox_MessageType_Click(sender As Object, e As EventArgs) Handles ToolStripComboBox_MessageType.Click
    Me.ToolStripComboBox_MessageType.ComboBox.DataSource = DataSet_UToolDb.XML_MESSAGE_TYPE
    Me.ToolStripComboBox_MessageType.ComboBox.DisplayMember = "MessageType"
    Me.ToolStripComboBox_MessageType.ComboBox.ValueMember = "MTId"
End Sub

Private Sub ToolStripComboBox_MessageType_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ToolStripComboBox_MessageType.SelectedIndexChanged
    Me.TableAdapter_XML_MESSAGE_STRUCTURE.Fill(DataSet_UToolDb.XML_MESSAGE_STRUCTURE, Me.ToolStripComboBox_MessageType.ComboBox.SelectedValue)
End Sub

由于某种原因(如果我单步执行代码),代码从设置数据源的位置跳到填充TableAdapter的位置。这会导致异常,因为TableAdapter的select查询正在根据从ToolStipComboBox中选择的值查找值。

我怀疑您的代码正在跳转到TableAdapter的填充位置,因为通过设置组合框的数据源,您导致触发了
SelectedIndexChanged
事件

因此,如果ToolStripComboBox尚未填充,您需要告诉
SelectedIndexChanged
处理程序返回,这可以通过在ToolStripComboBox已填充时设置布尔标志来实现。例如:

Dim m_ToolStripComboBoxPopulated As Boolean

Private Sub ToolStripComboBox_MessageType_Click(sender As Object, e As EventArgs) Handles ToolStripComboBox_MessageType.Click
    Me.m_ToolStripComboBoxPopulated = False
    Me.ToolStripComboBox_MessageType.ComboBox.DataSource = DataSet_UToolDb.XML_MESSAGE_TYPE
    Me.ToolStripComboBox_MessageType.ComboBox.DisplayMember = "MessageType"
    Me.ToolStripComboBox_MessageType.ComboBox.ValueMember = "MTId"
    ' Indicate ToolStripComboBox has been populated
    Me.m_ToolStripComboBoxPopulated = True
End Sub

Private Sub ToolStripComboBox_MessageType_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ToolStripComboBox_MessageType.SelectedIndexChanged
    If (Me.m_ToolStripComboBoxPopulated = False) Then
        Return
    End If
    Me.TableAdapter_XML_MESSAGE_STRUCTURE.Fill(DataSet_UToolDb.XML_MESSAGE_STRUCTURE, Me.ToolStripComboBox_MessageType.ComboBox.SelectedValue)
End Sub