Событие выбора изменено в DataGridComboBoxColumn - PullRequest
1 голос
/ 31 марта 2012

У меня есть сетка данных с DatagridComboBoxColumn, и я хочу, чтобы Fire Event SelectionChanged, когда пользователь выбирает любую вещь из ComboBox, выполняет некоторые операции, как я могу сделать это, любой совет, спасибо

1 Ответ

14 голосов
/ 31 марта 2012

Вы можете обработать событие DataGridView EditingControlShowing и привести элемент управления редактированием к отображаемому ComboBox, а затем подключить его событие SelectionChangeCommitted. Используйте обработчик SelectionChangeCommitted, чтобы делать то, что вам нужно.

Подробнее см. Пример кода в статье MSDN, на которую я ссылался.

Два важных примечания:

  1. Несмотря на пример кода в статье MSDN, лучше всего использовать Событие ComboBox SelectionChangeCommitted, как обсуждено здесь и в комментарии к связанной статье MSDN.

  2. Если у вас более одного 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...