没有为类型DBNull和Boolean定义Operator =,但是不存在=运算符

时间:2016-10-18 10:42:39

标签: vb.net boolean operator-keyword infragistics dbnull

当检查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方法中以编程方式设置值,但这并没有解决问题

1 个答案:

答案 0 :(得分:2)

问题在于你的条件。

IsDBNull(ugProducts.ActiveRow.Cells("isNew").Value)评估为-> True

然后你试着这样做:

ugProducts.ActiveRow.Cells("isNew").Value = True

如果值为DBNull,上述陈述如何可能为真?这是代码失败的地方,因为ValueDBNull,您尝试将其与True进行比较(这是=所在的位置)

如果是OrElse,则需要使用DBNull缩短条件:

If IsDBNull(ugProducts.ActiveRow.Cells("isNew").Value) OrElse _ 

如果是DBNull,那么它将不会尝试进行其他比较,并将立即进入该区块。