0

我的项目有一个用户可以编辑并保存到数据库的 DataGridView。我正在尝试向 DataGridView 添加验证。(某些列是必需的,并且只能是数字(特别是双精度))。

我在处理 .Net 在幕后完成的一些自动解析时遇到了麻烦。DataGridView 的行为会有所不同,具体取决于用户是否将必填字段留空或输入无法解析为双精度的内容(即文本)。

更简单的情况:如果用户将必填字段留空并单击保存。保存按钮的单击事件触发,我可以检查单元格的 Value 属性是否设置为DBNull,在这种情况下,我设置单元格的ErrorText属性并显示MessageBox.

Harder Case:当用户输入的文本不能被解析为双精度时(例如,“asdf”)。发生这种情况时,一旦单元格失去焦点,就会在幕后发生一些内置的 .Net 验证,并且我会收到一个显示堆栈跟踪的消息框。我想完全禁用此验证,并在用户单击“保存”时进行自己的验证。

(直到那时,无效数据并不重要)。有谁知道如何做到这一点?

4

2 回答 2

0

我能够通过编辑我的 sql 查询以将浮点数转换为 nvarchars 来解决我的问题。现在 DataGridView 认为数据类型是文本,它无法通过任何类型的默认逻辑进行验证。我还发现除非用户按 Enter,否则不会提交该值,因此我的验证代码会检查单元格的 EditedFormattedValue 属性而不是 Value。

于 2013-08-09T15:34:26.167 回答
0

您可以使用下面的代码取消验证 - 虽然我没有测试过它,但我相信将 DataGridViewsCausesValidation属性设置为 false 可能会产生相同的效果。

Private Sub DataGridView1_CellValidating(sender As Object, e As DataGridViewCellValidatingEventArgs) Handles DataGridView1.CellValidating
    e.Cancel = True
End Sub
于 2013-08-08T22:43:22.233 回答