DataGridView.CellLeave无法识别单元格内容

时间:2014-02-06 21:48:20

标签: c# vb.net datagridview

我希望在满足某些条件时(大多数情况下不为空),第4列的内容将使用第1列和第3列的组合内容进行更新。

请注意,如果我点击和关闭已完成的单元格,它会按预期工作。好像CellLeave事件不知道最终的内容。第一次正确捕获Cell(0)中的值。它是Cell(2)又名当前列。

这就是我所拥有的:

Private Sub DataGridView2_CellLeave(ByVal sender As Object, ByVal e As DataGridViewCellEventArgs) Handles DataGridView2.CellLeave

    'Dim CurrentColumnIndex As Integer = DataGridView2.CurrentCell.ColumnIndex
    'Dim CurrentRowIndex As Integer = DataGridView2.CurrentCell.RowIndex

    If e.ColumnIndex = 2 Then
        If DataGridView2.Rows(e.RowIndex).Cells(1).Value <> "" Then
            DataGridView2.Rows(e.RowIndex).Cells(3).Value = DataGridView2.Rows(e.RowIndex).Cells(0).Value & "-" & DataGridView2.Rows(e.RowIndex).Cells(2).Value
        End If
    End If

End Sub

我对替代方法持开放态度,但我已经完成了这个方法,所以替代方法应该很简单。

我想要的结果:

+---+----+-----+       +---+---+-----+
| 1 | a  |     |  ---> | 1 | a | 1-a |
+---+----+-----+       +---+---+-----+

我的问题:

+---+----+-----+       +---+---+-----+      +---+---+-----+
| 1 | a  |     |  ---> | 1 | a | 1-  | ---> | 1 | a | 1-a |
+---+----+-----+       +---+---+-----+      +---+---+-----+

第一步是我进入的地方,第二步是当我离开牢房时发生的事情,第三步是当我重新进入和离开牢房时发生的事情。

1 个答案:

答案 0 :(得分:3)

当然,您不会在CellLeave事件中获得更改的值,因为尚未提交更改。在您的情况下,您在第三步中获取值,因为当时已提交更改的值。

如果您想获得更改的值,请订阅CellValueChanged事件。

dataGridView1.CellValueChanged += new DataGridViewCellEventHandler(dataGridView1_CellValueChanged);

在示例程序中,我将单元格值从1更改为3.查看事件如何触发以及值发生更改。

  1. CellLeave - 1
  2. CellValidating - 1
  3. CellValueChanged - 3
  4. CellValidated - 3
  5. CellEndEdit - 3