我的项目有一个DataGridView,用户可以编辑并保存到DB。我正在尝试向DataGridView添加验证。 (某些列是必需的,只能是数字(特别是双打))。
我无法解决.Net在幕后完成的一些自动解析。 DataGridView的行为是不同的,具体取决于用户是否将必填字段留空或输入无法解析为double(即文本)的内容。
更简单的情况:如果用户将必填字段留空并单击“保存”。触发Save按钮的click事件,我可以检查单元格的Value属性是否设置为DBNull
,在这种情况下,我设置了单元格的ErrorText
属性并显示MessageBox
。< / p>
更难案例:当用户输入无法解析为双精度的文本时(例如,“asdf”)。当发生这种情况时,一旦单元失去焦点,一些内置的.Net验证就会在幕后发生,我会得到一个显示堆栈跟踪的消息框。我想完全禁用此验证,并在用户单击“保存”时进行自己的验证。
(到目前为止,无效数据无关紧要)。有谁知道怎么做?
答案 0 :(得分:0)
您可以使用下面的代码取消验证 - 虽然我没有对其进行测试,但我认为将DataGridViews CausesValidation
属性设置为false可能会产生相同的效果。
Private Sub DataGridView1_CellValidating(sender As Object, e As DataGridViewCellValidatingEventArgs) Handles DataGridView1.CellValidating
e.Cancel = True
End Sub
答案 1 :(得分:0)
我能够通过编辑我的sql查询来将浮动转换为nvarchars来解决我的问题。现在,DataGridView认为数据类型是文本,它无法通过任何类型的默认逻辑进行验证。我还发现除非用户按Enter键,否则不会提交该值,因此我的验证代码会检查单元格的EditedFormattedValue属性而不是Value。