Vb.net / DataGridView / Столбец ComboBox
Я использую vb.net и winforms.
У меня есть форма с привязанным DataGridView. На DGV у меня есть 5 колонок с ComboBox. Я использую EditingControlShowing Even, чтобы поймать выбор ComboBox. (см. код ниже). Вот проблема:
После того, как я щелкаю на ячейке с помощью ComboBox и делаю выбор, а затем обновляю базовую ячейку (ячейка = выбранное значение), а затем нажимаю на другую строку DGV, она становится бесполезной. Если после того, как я обновлю Cell, я делаю и EndEdit в соответствующей строке DataSource, это, кажется, работает, находят.
Как определить соответствующую строку источника данных, чтобы я мог автоматизировать это?
Private Sub dataGridView1_EditingControlShowing(ByVal sender As Object, ByVal e As DataGridViewEditingControlShowingEventArgs) _
Handles DataGridView1.EditingControlShowing
Try
Debug.Print("entered the EditingControlShowing")
Dim ColName As String = Me.DataGridView1.Columns(Me.DataGridView1.CurrentCell.ColumnIndex).Name
If ColName = "Col1" Then 'Or ColName = "Col2" Or ColName = "Col3" Or ColName = "Col4" Or ColName = "Col5" Then
'the column you want to cast
Dim cmb As ComboBox = TryCast(e.Control, ComboBox)
RemoveHandler cmb.SelectedIndexChanged, AddressOf cmb_SelectedIndexChanged
AddHandler cmb.SelectedIndexChanged, AddressOf cmb_SelectedIndexChanged
End If
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
Sub cmb_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs)
Try
Me.DataGridView1.Rows(Me.DataGridView1.CurrentRow.Index).Cells(Me.DataGridView1.CurrentCell.ColumnIndex).Value = CType(sender, ComboBox).SelectedItem
'
' HERE IF I PUT MyDataSet.Tables(0).Rows(?).EndEding it works - but how to konw what row?
'
UpdateAvgColumn(Me.DataGridView1.CurrentRow.Index)
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
1 ответ
Возникающие события возвращаются. Если вы в настоящее время обрабатываете событие, вы должны быть осторожны, чтобы не обрабатывать другие события. Вы должны поместить операторы IF вокруг обработки событий, чтобы пропустить выполнение кода, если обрабатывается другое событие.
sub dgv_selecteditemchanged()
If not processing_event
processing_event = true
...
processing_event = false
end if
end sub