c# – DataGridViewCheckBoxColumn:布尔列上的FormatException

前端之家收集整理的这篇文章主要介绍了c# – DataGridViewCheckBoxColumn:布尔列上的FormatException前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我甚至不知道在哪里修复此错误.
在我点击DataGridViewCheckBoxColumn中的复选框来检查它并离开该单元格后,最近我得到了以下异常:

System.FormatException: “” is not valid for Boolean

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

我甚至不知道我能找到哪个事件来找到这个问题的原因.在错误发生之前触发Validating和CellFormatting事件,但两者都会运行.
如果我处理DataError事件,我仍然无法弄明白. DataGridViewDataErrorEventArgs参数包含以下信息(以及其他信息):

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

完整的异常(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,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 Web服务中的一个类,带有bool-field IsAssigned,因此它永远不能为null(甚至是空字符串).

解决方法

好吧,我已经用Windows窗体设计器做了一些测试,我在代码生成器中发现了一些奇怪的东西.所以,我在测试中所做的是

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

现在,它工作正常,数据显示正确,也没有给出任何错误.
然后我更改了CheckedBoxColumn的DefaultCellStyle属性,并从Nullvalue属性删除了False值并再次启动它.
现在,应用程序显示错误.

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

因此,加载了Form.designer.cs文件并检查了dataGridViewCellStyle1对象.我发现该属性设置为字符串类型值“False”而不是布尔类型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#相关文章