Vb.net / DataGridView / ComboBox Column - PullRequest
       6

Vb.net / DataGridView / ComboBox Column

1 голос
/ 07 марта 2011

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

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

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

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

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 Ответ

0 голосов
/ 09 марта 2011

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

sub dgv_selecteditemchanged()
  If not processing_event
    processing_event = true
    ...
    processing_event = false
  end if
end sub
...