我什至不知道去哪里修复这个错误。最近我在单击 DataGridViewCheckBoxColumn
中的复选框后出现以下异常检查它并离开该单元格:
System.FormatException: "" is not valid for Boolean
这是来自 DataGridView
的完整错误对话框:
我什至不知道我可以处理哪个事件来找到这个问题的原因。 Validating
和 CellFormatting
事件在错误之前触发,但两者都运行。如果我处理 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
指定任何内容, TrueValue
或 IndeterminateValue
:
BindingSource
的数据源是 List<ErpService.ArrivalChargeAssignment>
在哪里 ArrivalChargeAssignment
是我的 WCF 网络服务中的一个类,带有 bool
-字段 IsAssigned
, 所以它永远不可能是 null
(甚至是一个空字符串)。
好的,我用 windows 窗体设计器做了一些测试,我发现代码生成器中有一些奇怪的东西。所以,我在测试中所做的是
首先,我添加了一个 DataGridViewCheckBoxColumn
类型的列,并用数据表填充了 datagridview
。我添加了一些带有空值的记录。
现在,它工作正常,数据显示正确,也没有出现任何错误。然后我更改了该 CheckedBoxColumn
的 DefaultCellStyle
属性,并从 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
值。但是,在修改该属性后,对象已被创建,并且该属性被分配了字符串类型值。
更新:只需重新创建该列即可解决此问题。
我是一名优秀的程序员,十分优秀!