2009-01-15 74 views
3

目前我使用:强制DataGridView Cell只接受数字输入的最佳方式是什么?

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 

但有一个更好的解决方案?最好先防止非数字输入,而不是在输入后修复它。

回答

2

如果您倾听了KeyPress事件而不是CellEndEdit事件,则您发布的解决方案可能会更好。然后,您可以在用户键入文本框时检查有效值,如果输入的值无效,则还原为以前的值。

或者,这并不完全符合您的要求,但您可以通过某种视觉指示器告诉用户他们输入的内容无效,例如将ForeColor更改为红色?这会通知用户不良数据,同时不会让他或她拒绝某些拒绝某些按键的文本框。结合您当前的帖子输入检查可能是一个很好的解决方案。

1

您也可以设置该行的ErrorText属性并在RowValidating事件中检查标志或错误文本。如果存在错误,请将取消设置为true。当值有效时,不要忘记将errortext设置为空字符串。

UPDATE:

我只是尝试这样做,来更好的解决方案: 检查在CellValidating事件的价值,并设置ERRORTEXT,因为在这里你可以取消验证。当前输入的值可以通过属性网格[e.ColumnIndex,e.RowIndex] .EditedFormattedValue

相关问题