加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – DataGridViewCheckBoxColumn:布尔列上的FormatException

发布时间:2020-12-15 08:20:16 所属栏目:百科 来源:网络整理
导读:我甚至不知道在哪里修复此错误. 在我点击DataGridViewCheckBoxColumn中的复选框来检查它并离开该单元格后,最近我得到了以下异常: System.FormatException: “” is not valid for Boolean 这是DataGridView的完整错误对话框: 我甚至不知道我能找到哪个事件
我甚至不知道在哪里修复此错误.
在我点击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值.但是,在修改该属性后,已创建对象并为该属性分配字符串类型值.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读