【发布时间】:2019-03-20 21:08:32
【问题描述】:
很难发布代码,但很容易描述如何重现:
新建一个 Winforms 项目(我使用的是 VS 2017 和 .NET 4.7)
- 将数据集添加到项目中。
- 在 DataSet 中,添加一个 DataTable(无适配器)。
- 在DataTable 中,添加一列。它将默认为 varchar,但将其更改为不允许空值。
- 向项目添加表单。
- 将 DataGridView 添加到表单中。
- 将 DGV 的 DataSource 设置为 DataSet 中的 DataTable。
- 运行程序。
- 单击单行的单列。
- 键入一些内容。
- 选择所有内容并按退格键。
- 点击出现的第二行空白。
会发生什么:引发 System.Data.NoNullAllowedException 指示数据列不允许 DBNull.Value。
应该发生什么:绑定到 dgv 第一行的行中的列应该设置为空白,而不是 null。
我尝试过的:
- 使用 CellEndEdit 处理程序捕获错误值并将其转换为 string.Empty。这确实解决了一些情况(当有多个列时)
- 使用 CellValidating 处理程序 - 没有帮助
- 使用 CellFormatting 处理程序 - 没有帮助
- 使用 CellParsing 处理程序 - 没有帮助
- 在 BindingSource 上使用 AdditionalNew 处理程序来提供具有非空值的新行 - 没有帮助
还有其他想法吗?
【问题讨论】:
-
使用 RowValidating 事件处理程序,正如 Google 小组帖子所建议的那样,看起来很有希望。我还尝试使用 DataError 处理程序,它在一定程度上有所帮助(防止错误弹出),但有其他不良视觉效果(导致新行意外消失)。
-
太棒了 - 请告诉我们你的进展。我通过谷歌搜索找到了
nonullallowedexception datagridview blank。 -
感谢您的研究。我没有搜索那个特定的异常(呃!),搜索 DataGridView 和其他术语会产生太多的垃圾,但这个异常是非常具体的。
-
我通常以相反的方式工作;允许空值并设置列返回一个 string.empty 如果它为空(而不是抛出异常)
标签: c# winforms datagridview