Вы можете обработать событие DataGridView EditingControlShowing
и привести элемент управления редактированием к отображаемому ComboBox, а затем подключить его событие SelectionChangeCommitted
. Используйте обработчик SelectionChangeCommitted
, чтобы делать то, что вам нужно.
Подробнее см. Пример кода в статье MSDN, на которую я ссылался.
Два важных примечания:
Несмотря на пример кода в статье MSDN, лучше всего использовать
Событие ComboBox SelectionChangeCommitted
, как обсуждено здесь и в
комментарии к связанной статье MSDN.
Если у вас более одного DatagridComboBoxColumn
в вашем
DataGridView вы можете определить, какой из ваших
EditingControlShowing
или ComboBox SelectionChangeCommitted
событие. Вы можете сделать это, проверив свой DGV
CurrentCell.ColumnIndex
значение свойства.
Я немного переработал пример кода MSDN, чтобы показать, что я имею в виду:
Private Sub DataGridView1_EditingControlShowing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewEditingControlShowingEventArgs) Handles DataGridView1.EditingControlShowing
' Only for a DatagridComboBoxColumn at ColumnIndex 1.
If DataGridView1.CurrentCell.ColumnIndex = 1 Then
Dim combo As ComboBox = CType(e.Control, ComboBox)
If (combo IsNot Nothing) Then
' Remove an existing event-handler, if present, to avoid
' adding multiple handlers when the editing control is reused.
RemoveHandler combo.SelectionChangeCommitted, New EventHandler(AddressOf ComboBox_SelectionChangeCommitted)
' Add the event handler.
AddHandler combo.SelectionChangeCommitted, New EventHandler(AddressOf ComboBox_SelectionChangeCommitted)
End If
End If
End Sub
Private Sub ComboBox_SelectionChangeCommitted(ByVal sender As System.Object, ByVal e As System.EventArgs)
Dim combo As ComboBox = CType(sender, ComboBox)
Console.WriteLine("Row: {0}, Value: {1}", DataGridView1.CurrentCell.RowIndex, combo.SelectedItem)
End Sub