当检查UltraGrid中复选框样式列的值时,我使用BeforeRowsDeleted方法中的以下代码来设置布尔值,然后根据布尔值,运行2个删除方法中的一个
但是,我收到系统异常
没有为类型DBNull和Boolean
定义Operator =
之前我已经看过几次这个错误了,但我很困惑,因为虽然在单步执行代码时我可以看到存储的值实际上是一个System.DBNull,但没有等同正在使用的标志?
为什么会出现此错误,代码在哪里错误?
If IsDBNull(ugProducts.ActiveRow.Cells("isNew").Value) Or _
ugProducts.ActiveRow.Cells("isNew").Value = True Or _
ugProducts.ActiveRow.Cells("isNew").Value = Nothing Then
exProd = True
Else
exProd = False
End If
我还试图在网格的InitializeLayout方法中以编程方式设置值,但这并没有解决问题
答案 0 :(得分:2)
问题在于你的条件。
IsDBNull(ugProducts.ActiveRow.Cells("isNew").Value)
评估为-> True
然后你试着这样做:
ugProducts.ActiveRow.Cells("isNew").Value = True
如果值为DBNull
,上述陈述如何可能为真?这是代码失败的地方,因为Value
是DBNull
,您尝试将其与True
进行比较(这是=
所在的位置)
如果是OrElse
,则需要使用DBNull
缩短条件:
If IsDBNull(ugProducts.ActiveRow.Cells("isNew").Value) OrElse _
如果是DBNull
,那么它将不会尝试进行其他比较,并将立即进入该区块。