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
Другие вопросы по тегам