目前我正在使用:
Private Sub dgvStock_CellEndEdit(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgvStock.CellEndEdit
Select Case Me.dgvStock.Columns(e.ColumnIndex).Name
Case "Quantity", "Unit Cost"
If Not IsNumeric(Me.dgvStock(e.ColumnIndex, e.RowIndex).Value) Then
Me.dgvStock(e.ColumnIndex, e.RowIndex).Value = 0
End If
End Select
End Sub
但是有更优雅的解决方案吗?最好先防止非数字输入,而不是在输入后修复它。
答案 0 :(得分:2)
如果您收听了KeyPress事件而不是CellEndEdit事件,那么您发布的解决方案可能会更好。然后,您可以在用户在文本框中键入时检查有效值,如果输入的值无效,则还原为先前的值。
或者,这并不是你要求的,但是你可以使用某种视觉指示器来告诉用户他们输入的内容是无效的,例如将ForeColor更改为Red?这将告知用户不良数据,同时不会使他或她混淆拒绝某些按键的文本框。结合您当前的帖子输入检查可能是一个很好的解决方案。
答案 1 :(得分:1)
您还可以设置行的ErrorText属性,并在RowValidating事件中检查标志或错误文本。如果存在错误,请将“取消”设置为true。当值有效时,不要忘记将errortext设置为空字符串。
<强>更新强>
我刚刚尝试了这个并获得了更好的解决方案: 检查CellValidating事件中的值并设置errortext,因为在这里您可以取消验证。可以通过属性网格检索当前输入的值[e.ColumnIndex,e.RowIndex] .EditedFormattedValue