1

我正在使用 vb.net 和 winforms。

我有一个绑定 DataGridView 的表单。在 DGV 上,我有 5 列带有 ComboBox。我正在使用 EditingControlShowing Even 来捕捉 ComboBox 选择。(见下面的代码)。这是问题所在:

在我单击带有 ComboBox 的单元格并进行选择然后更新底层单元格(单元格 = 选定值)然后单击 DGV 的另一行后,它变得混乱。如果在我更新单元格后,我在 DataSource 的相应行上执行 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
4

1 回答 1

0

被触发的事件正在重新进入。如果您当前正在处理一个事件,则必须小心不要处理其他事件。如果正在处理不同的事件,您必须在事件处理周围放置 IF 语句以跳过执行代码。

sub dgv_selecteditemchanged()
  If not processing_event
    processing_event = true
    ...
    processing_event = false
  end if
end sub
于 2011-03-09T16:05:50.830 回答