在编辑另一个单元格时填充其他单元格

Populate other Cells while Another Cell is being Editted

我想做的是(只是一个例子),在输入 dgv 行 0,列 0 时,如果值 = 10,则 dgv 行 0,列 1 = 是。但是如果 dgv 行 0,列 0 值 = 100 那么 dgv 行 0,列 1 = No.

我希望在输入时 运行,因此 dgv 第 0 行第 1 列可以在我完成第 0 行第 0 列之前显示几个不同的值。

抱歉,如果这没有意义,我发现很难解释。这就是我一直无法在网上找到答案的原因。

我正在尝试 cellvaluechanged 事件,但它只会在我退出第 0 行第 0 列后更改第 0 行第 1 列,而不是在我输入时更改。 并且还尝试了 editiingcontrolshowing 事件,但我无法获取事件行和列索引。如果我能弄清楚如何获取行和列索引,我想我也许能让这个工作。

如有任何帮助,我们将不胜感激。

我认为这个问题是重复的。

查看此回答

TL;DR DataGridView.CurrentCellDirtyStateChanged 和 DataGridView.CellValueChanged 事件

Private Sub YourDGV_CurrentCellDirtyStateChanged(sender As Object, e As EventArgs)
    If YourDGV.CurrentCell.ColumnIndex = rateColumnIndex Then
        YourDGV.CommitEdit(DataGridViewDataErrorContexts.Commit)
    End If
End Sub

Private Sub YourDGV_CellValueChanged(sender As Object, e As DataGridViewCellEventArgs)
    If e.ColumnIndex = rateColumnIndex Then
        Dim cellAmount As DataGridViewTextBoxCell = YourDGV.Rows(e.RowIndex).Cells(amountColumnIndex)
        Dim cellQty As DataGridViewTextBoxCell = YourDGV.Rows(e.RowIndex).Cells(qtyColumnIndex)
        Dim cellRate As DataGridViewTextBoxCell = YourDGV.Rows(e.RowIndex).Cells(rateColumnIndex)
        cellAmount.Value = CInt(cellQty.Value) * CInt(cellRate.Value)
    End If
End Sub

使用 EditingControlShowing 事件的替代解决方案。

Private Sub DataGridView1_EditingControlShowing(sender As Object, e As System.Windows.Forms.DataGridViewEditingControlShowingEventArgs) Handles DataGridView1.EditingControlShowing

    Try
        RemoveHandler e.Control.KeyUp, AddressOf UpdateAnotherColumnOnKeyUp
    Catch ex As Exception
    End Try

    If Me.DataGridView1.CurrentCell.ColumnIndex = 0 Then
        AddHandler e.Control.KeyUp, AddressOf UpdateAnotherColumnOnKeyUp
    End If

End Sub

Private Sub UpdateAnotherColumnOnKeyUp(sender As Object, e As System.Windows.Forms.KeyEventArgs)

    With DataGridView1.CurrentCell

        Dim blnAnotherColumnValue As Boolean = False

        If CType(sender, TextBox).Text = 10 Then
            blnAnotherColumnValue = True
        End If

        DataGridView1.Rows(.RowIndex).Cells(1).Value = blnAnotherColumnValue

    End With

End Sub