Vb.net Datagridview控件修改另一个
我正试图根据在myVb.net Datagridview控件修改另一个,vb.net,datagridview,combobox,Vb.net,Datagridview,Combobox,我正试图根据在mydatagridview中选择的第一个combobox(其中也包含textbox列)向第二个combobox添加值 这是我的密码: Private Sub DataGridView1_EditingControlShowing(sender As Object, e As System.Windows.Forms.DataGridViewEditingControlShowingEventArgs) Handles DataGridView1.EditingControlSho
datagridview
中选择的第一个combobox
(其中也包含textbox
列)向第二个combobox
添加值
这是我的密码:
Private Sub DataGridView1_EditingControlShowing(sender As Object, e As System.Windows.Forms.DataGridViewEditingControlShowingEventArgs) Handles DataGridView1.EditingControlShowing
Try
'Sub Recurrence combobox is selected
If DataGridView1.CurrentCell.ColumnIndex = 4 Then
'Verify what is chosen in the Recurrence textbox
Dim rowIndex = DataGridView1.CurrentCell.RowIndex
Dim FirstComboboxValue = DataGridView1(3, rowIndex).Value
If Not IsNothing(FirstComboboxValue) Then
Dim cmb As ComboBox = TryCast(e.Control, ComboBox)
RemoveHandler cmb.SelectedIndexChanged, New EventHandler(AddressOf ComboBox_SelectedIndexChanged)
AddHandler cmb.SelectedIndexChanged, New EventHandler(AddressOf ComboBox_SelectedIndexChanged)
End If
End If
Catch ex As Exception
MsgBox(ex.ToString())
End Try
End Sub
我的处理程序向组合框\u SelectedIndexChanged事件触发触发器:
Private Sub ComboBox_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs)
If DataGridView1.CurrentCell.ColumnIndex = 4 Then
Dim comboBox As ComboBox = CType(sender, ComboBox)
Dim cbCell As DataGridViewComboBoxCell = DirectCast(DataGridView1.Rows(DataGridView1.CurrentCell.RowIndex).Cells(4), DataGridViewComboBoxCell)
Dim rowIndex = DataGridView1.CurrentCell.RowIndex
Dim FirstComboboxValue = DataGridView1(3, rowIndex).Value
'Clear items so they don't keep adding on each other
cbCell.Items.Clear()
Select Case FirstComboboxValue
Case "Choice1"
cbCell.Items.Add("Item1")
cbCell.Items.Add("Item2")
Case "Choice2"
cbCell.Items.Add("Item3")
cbCell.Items.Add("Item4")
Case "Choice3"
cbCell.Items.Add("Item5")
Case "Choice4"
cbCell.Items.Add("Item6")
cbCell.Items.Add("Item7")
End Select
'Remove event handler to prevent memory leak
RemoveHandler comboBox.SelectedIndexChanged, AddressOf ComboBox_SelectedIndexChanged
End If
End Sub
出于某种原因,当我使用断点并逐步执行程序时,只有在第二次尝试打开“item”组合框时,项目才会添加到第二个组合框中
如果我尝试在不调试的情况下运行程序,则不会显示任何内容。知道我做错了什么吗?如果在组合框中使用SelectedIndexChanged,即使未单击组合框,也可能会遇到触发事件的问题
打开和关闭Windows窗体时会发生这种情况
通过使用SelectionChangeCommitted事件,这是一个更好的方法
SelectionChangeCommitted事件发生在所选项目已更改且该更改显示在组合框中时
通过使用SelectionChangeCommitted事件,您不需要声明RemoveHandler和AddHandler语句
另一种可能性:
尝试使用处理cmb。SelectedIndexChanged
在VB.NET中声明事件有几种方法。通常使用handles关键字
Private Sub ComboBox_SelectedIndexChanged(ByVal sender As Object,
ByVal e As EventArgs) Handles cmb.SelectedIndexChanged
谢谢你的回复!不幸的是,由于在我的EditingControlShowing事件之外声明了该方法,这将出错。它不知道如何处理“cmb”,我知道这将适用于普通的组合框控件。问题是我们正在处理一个DataGridViewComboxColumn,他们需要处理程序才能工作。您是否尝试过使用addHandler和removeHandler处理:SelectionChangeCommitted事件?是的,很遗憾,结果与SelectedIndexChanged相同。同时,我将开发另一个表单,在datagridview中添加信息。这是一个解决办法,但我也会在周末自己的时间努力解决这个问题。