【问题标题】:Unbound DataGridView add row with checkbox error未绑定的 DataGridView 添加带有复选框错误的行
【发布时间】: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


【解决方案1】:

根据你的解释,我对这个问题没有真正的解释。

一种解决方法可能是在填充 DataGridView 之前将 AllowUserToAddRows 设置为 false,然后再将其设置为 true。

【讨论】:

  • 感谢您的想法。我累了,但没有快乐。幸运的是,我确实找到了答案。见下文。
【解决方案2】:

找到了。希望对其他人有所帮助...

正在添加的行是未提交的行。要解决它,捕获行添加的索引,设置当前单元格并通知添加的行是脏的:

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 事件之前发生。

还是不解。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-26
    • 2021-11-16
    相关资源
    最近更新 更多