这是一个Windows窗体程序。我有一个带有四列的未绑定DataGridView控件;功能ID为字符串,部件为字符串,Flats为字符串,ShowOnEst为boolean。列在表单设计器中定义,布尔列确实设置为一个复选框,其中三态设置为false。
用户从列表框中选择产品,并执行此代码以填充网格
grdFeat.Rows.Clear()
For i = 0 To curProduct.lstFeatures.Count - 1
With (curProduct.lstFeatures(i))
grdFeat.Rows.Add(.FeatureId, .Parts, .Flats, .ShowOnEst)
End With
Next
如果AllowUserToAddRows为false,则表示正常。但是,将AllowUserToAddRows设置为true会导致以下错误:
出现FormatException
价值''无法转换为'布尔'。
我的代码中未触发错误。它显示在标题为" No Source Available"。
的新标签中很明显,添加新编辑行的过程是尝试将复选框设置为字符串值,或者可能为NULL。我对vb.net很新(几个月),所以我怀疑我在某个地方忽略了一些简单的设置,但经过几个小时的尝试找到它之后,我开始感觉到了这里有点傻。
我已经列出了我已经尝试过的东西,但它很长。 :)我甚至试图通过手动添加新行来解决这个问题,.add("","","",False),但即使我告诉它要在复选框中放入什么,这也会产生同样的错误。
我错过了什么?另外,有人能指出我对新编辑行的工作方式的解释吗?
答案 0 :(得分:1)
根据你的解释,我对这个问题没有真正的解释。
解决方法可能是在填充DataGridView之前将AllowUserToAddRows设置为false,并在之后将其设置为true。
答案 1 :(得分:0)
找到它。希望它可以帮助别人...
添加的行是未提交的行。要解决此问题,请捕获行添加的索引,设置当前单元格并通知添加的行是脏的:
grdFeat.Rows.Clear()
For i = 0 To curProduct.lstFeatures.Count - 1
With (curProduct.lstFeatures(i))
Dim p = grdFeat.Rows.Add(.FeatureId, .Parts, .Flats, .ShowOnEst)
End With
grdFeat.CurrentCell = grdFeat.Rows(p).Cells(0)
grdFeat.NotifyCurrentCellDirty(True)
Next
嗯,经过进一步的实验,这不是一个完全修复。问题仍然存在,但至少现在处理DataError事件允许我在代码中用它做一些事情。如果没有这些行,则会在触发DataError事件之前发生错误。
仍然感到困惑。