Vb.net / DataGridView / Столбец ComboBox

Я использую vb.net и winforms.

У меня есть форма с привязанным DataGridView. На DGV у меня 5 столбцов с ComboBox. Я использую EditingControlShowing Even, чтобы поймать выделение ComboBox. (см. код ниже). Вот в чем проблема:

После того, как я нажимаю на ячейку с ComboBox и делаю выбор, а затем обновляю базовую ячейку (ячейка = выбранное значение), а затем нажимаю на другую строку DGV, она выходит из строя. Если после того, как я обновляю Cell I do и EndEdit в соответствующей строке DataSource, кажется, что работает find.

Как я могу определить соответствующую строку источника данных, чтобы это можно было автоматизировать?

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

person Alex    schedule 06.03.2011    source источник
comment
У вас есть уникальный идентификатор в DataGridView? Если это так, вы можете использовать это значение, чтобы найти соответствующую строку в наборе данных.   -  person NoAlias    schedule 07.03.2011
comment
Попробуйте MyDataSet.Tables(0).Rows(Me.DataGridView1.CurrentRow.Index).EndEding   -  person NeverHopeless    schedule 03.03.2014


Ответы (1)


Активные события возвращаются. Если вы в настоящее время обрабатываете событие, вы должны быть осторожны, чтобы не обрабатывать другие события. Вы должны поместить операторы IF вокруг обработки событий, чтобы пропустить выполнение кода, если обрабатывается другое событие.

sub dgv_selecteditemchanged()
  If not processing_event
    processing_event = true
    ...
    processing_event = false
  end if
end sub
person Marc Johnston    schedule 09.03.2011