未绑定的DataGridView添加带有复选框错误的行

时间:2015-08-07 17:15:15

标签: vb.net datagridview

这是一个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),但即使我告诉它要在复选框中放入什么,这也会产生同样的错误。

我错过了什么?另外,有人能指出我对新编辑行的工作方式的解释吗?

2 个答案:

答案 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事件之前发生错误。

仍然感到困惑。