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

Operator = is not defined for type DBNull and Boolean, but no = operator is present

检查 UltraGrid 中复选框样式列的值时,我在 BeforeRowsDeleted 方法中使用以下代码来设置布尔值,然后根据布尔值,2 种删除方法之一是 运行.

但是,我收到一个系统异常

Operator = is not defined for type DBNull and Boolean

我以前见过几次这个错误,但我很困惑,因为虽然在逐步执行代码时我可以看到存储的值实际上是 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 方法中以编程方式设置值,但这并没有解决问题

问题出在你的条件上

IsDBNull(ugProducts.ActiveRow.Cells("isNew").Value) 的计算结果为 -> True

那你试着做:

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

如果值为 DBNull,上述说法怎么可能成立?这是代码失败的地方,因为 ValueDBNull 并且您尝试将它与 True 进行比较(这就是 = 所在的位置)

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

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

如果是DBNull那么它不会尝试做其他比较,直接进入块。