我尝试做的只是一个例子,输入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索引,我想我可以让这个工作。
任何帮助都将不胜感激。
答案 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