c# - DataGridViewCheckBoxColumn : FormatException

我什至不知道去哪里修复这个错误。 最近我在单击 DataGridViewCheckBoxColumn 中的复选框后出现以下异常检查它并离开该单元格:

System.FormatException: "" is not valid for Boolean

这是来自 DataGridView 的完整错误对话框:

我什至不知道我可以处理哪个事件来找到这个问题的原因。 ValidatingCellFormatting事件在错误之前触发,但两者都运行。 如果我处理 DataError -事件我仍然无法弄清楚。 DataGridViewDataErrorEventArgs参数包含以下信息(除其他外):

e.ColumnIndex = 0 
e.RowIndex    = 0 
e.Context     = Commit

完整的异常(exception)(e.Exception.ToString())是:

System.FormatException: is not a valid value for Boolean. ---> System.FormatException: String was not recognized as a valid Boolean. at System.Boolean.Parse(String value) at System.ComponentModel.BooleanConverter.ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, Object value) --- End of inner exception stack trace --- at System.ComponentModel.BooleanConverter.ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, Object value) at System.ComponentModel.TypeConverter.ConvertFrom(Object value) at System.Windows.Forms.DataGridView.DataGridViewDataConnection.PushValue(Int32 boundColumnIndex, Int32 columnIndex, Int32 rowIndex, Object value)

下面是相关列属性的截图,列有ThreeState=false并且没有为 FalseValue 指定任何内容, TrueValueIndeterminateValue :

BindingSource 的数据源是 List<ErpService.ArrivalChargeAssignment>在哪里 ArrivalChargeAssignment是我的 WCF 网络服务中的一个类,带有 bool -字段 IsAssigned , 所以它永远不可能是 null (甚至是一个空字符串)。

最佳答案

好的,我用 windows 窗体设计器做了一些测试,我发现代码生成器中有一些奇怪的东西。所以,我在测试中所做的是

首先,我添加了一个 DataGridViewCheckBoxColumn 类型的列,并用数据表填充了 datagridview。我添加了一些带有空值的记录。

现在,它工作正常,数据显示正确,也没有出现任何错误。 然后我更改了该 CheckedBoxColumnDefaultCellStyle 属性,并从 Nullvalue 属性中删除了 False 值并重新启动它。 现在,应用程序显示该错误。

我回到那个 DefaultCellStyle 属性并设置了 False 值。然后我再次运行该项目。但是,它仍然向我显示同样的错误。

因此,加载 Form.designer.cs 文件并检查 dataGridViewCellStyle1 对象。我发现该属性是使用字符串类型值 "False" 而不是 bool 类型 false 设置的。

dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter;
dataGridViewCellStyle1.NullValue = "False";
this.Column1.DefaultCellStyle = dataGridViewCellStyle1;
this.Column1.HeaderText = "Check Box";
this.Column1.Name = "chkCol";

因此,我已按如下方式更新了该行并再次启动了该项目。现在,错误消失了。

dataGridViewCellStyle1.NullValue = false;

当我创建了 DataGridViewCheckBoxColumn 后,我发现没有为默认单元格样式属性创建对象。因此,默认情况下 NullValue 属性采用 false 值。但是,在修改该属性后,对象已被创建,并且该属性被分配了字符串类型值。

更新:只需重新创建该列即可解决此问题。

关于c# - DataGridViewCheckBoxColumn : FormatException on boolean-column,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26760983/

相关文章:

python - 在 Python 中口头格式化数字

vim - 使用 Vim,是否有更有效的方法来根据这个最佳实践来格式化 LaTeX 段落?

mysql - 如何将 MySQL 结果以表格式存储到文件中

formatting - 如何在我的博客文章中使用 stackoverflow 样式标记?

c# - 使用 String.Format 时,如果字符串值不为 null 或为空,是否有一种简单的

formatting - 从 Mathematica 导出自定义格式的表达式

Python 浮点格式 - 类似于 "g",但数字更多

xml - 如何使用 gVim 格式化未格式化的 XML 文档?

string - 什么函数用于格式化/替换 Grails/Groovy 中字符串中的 {0} {1}

html - 用于 HTML 和 CSS 中的双面打印的甚至分页符