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
,上述说法怎么可能成立?这是代码失败的地方,因为 Value
是 DBNull
并且您尝试将它与 True
进行比较(这就是 =
所在的位置)
如果条件是DBNull
,您需要使用OrElse
来缩短条件:
If IsDBNull(ugProducts.ActiveRow.Cells("isNew").Value) OrElse _
如果是DBNull
那么它不会尝试做其他比较,直接进入块。
检查 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
,上述说法怎么可能成立?这是代码失败的地方,因为 Value
是 DBNull
并且您尝试将它与 True
进行比较(这就是 =
所在的位置)
如果条件是DBNull
,您需要使用OrElse
来缩短条件:
If IsDBNull(ugProducts.ActiveRow.Cells("isNew").Value) OrElse _
如果是DBNull
那么它不会尝试做其他比较,直接进入块。