【发布时间】:2015-08-07 17:15:14
【问题描述】:
这是一个 Windows 窗体程序。我有一个带有四列的未绑定 DataGridView 控件;特征 ID 为字符串,零件为字符串,平面为字符串,ShowOnEst 为布尔值。这些列是在表单设计器中定义的,并且布尔列确实设置为三态设置为 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 会导致以下错误:
格式异常
值“”不能转换为“布尔”类型。
我的代码中没有触发该错误。它显示在标题为“无可用来源”的新选项卡中。
似乎很清楚,添加新编辑行的过程正在尝试将复选框设置为字符串值,或者可能为 NULL。我对 vb.net 很陌生(几个月),所以我怀疑我在某个地方忽略了一些简单的设置,但是经过几个小时的尝试找到它,我开始觉得这里有点愚蠢。
我会给你一个我已经尝试过的东西的清单,但它很长。 :) 我什至试图通过手动添加一个新行来解决这个问题,.add("","","",False),但这也给出了同样的错误,即使我告诉它放什么在复选框中。
我错过了什么?另外,有人可以解释一下新的编辑行是如何工作的吗?
【问题讨论】:
-
你处理 DefaultValuesNeeded 事件吗?
-
是的,我为此添加了代码,并且 CellValueNeeded 只是作为一个实验。该错误发生在任一事件触发之前。我从文档中的感觉是这些事件在虚拟模式下很有用,但值得一试。我也试过打开虚拟模式,但还是一样。
-
出于问题识别的目的,您能否再试一次建议的解决方法,即“在填充 DataGridView 之前将 AllowUserToAddRows 设置为 false 并在之后将其设置为 true”,但在之前插入“Application.DoEvents()” “grdFeat.AllowUserToAddRows=true”。其他试验:代替 DoEvents(),做 grdFeat.Invalidate()。
-
感谢您对此问题的关注。我通过设置 AllowUserToAddRows = false 并在代码中处理新行来解决这个问题。增加了一点复杂性,但没有更多错误
标签: vb.net datagridview