【问题标题】:datagridview disable automatic parsingdatagridview 禁用自动解析
【发布时间】:2013-08-09 23:34:26
【问题描述】:

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

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

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

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

(在那之前,无效数据无关紧要)。有谁知道怎么做?

【问题讨论】:

    标签: .net vb.net winforms datagridview


    【解决方案1】:

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

    Private Sub DataGridView1_CellValidating(sender As Object, e As DataGridViewCellValidatingEventArgs) Handles DataGridView1.CellValidating
        e.Cancel = True
    End Sub
    

    【讨论】:

    • 这些选项都不起作用。设置 CausesValidation = false 似乎没有任何影响,并且使用您建议的 CellValidating 处理程序导致 form_load 上的错误消息框(填充网格时),因为取消事件意味着它无法提交单元格值。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-12
      • 1970-01-01
      • 2014-04-23
      • 1970-01-01
      • 2013-05-02
      • 2010-11-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多