微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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值.但是,在修改属性后,已创建对象并为该属性分配字符串类型值.

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

原文地址:https://www.jb51.cc/csharp/243213.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐