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

时间:2015-02-19 10:03:13

标签: vb.net datagridview

我尝试做的只是一个例子,输入dgv row 0,col 0,如果值= 10则dgv row 0,col 1 = Yes。但是如果dgv第0行,第0列值= 100则dgv第0行,第1列=否。

我希望在我输入时运行,所以dgv row 0,col 1可以显示几个不同的值,然后我才能完成第0行,第0行。

对不起,如果这没有意义,我发现很难解释。正当地为什么我无法在网上找到答案。

我尝试过cellvaluechanged事件,但是只有在我退出第0行,第0列时才更改第0行,第1列,而不是在我输入时。 并且还尝试了editiingcontrolshowing事件,但是我无法获得事件row和col索引。如果我能弄清楚如何获得行和col索引,我想我可以让这个工作。

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:0)

我相信这个问题是重复的。

请参阅此回答https://stackoverflow.com/a/7226872/2319909

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

答案 1 :(得分:0)

使用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