Оператор = не определен для типов DBNull и Boolean, но оператор = отсутствует

При проверке значения столбца стиля флажка в UltraGrid я использую следующий код в методе BeforeRowsDeleted, чтобы установить логическое значение, а затем, в зависимости от логического значения, запускается один из двух методов удаления.

Однако я получаю системное исключение, говорящее

Оператор = не определен для типа DBNull и 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 сетки, но это не исправило ситуацию.


person Community    schedule 18.10.2016    source источник


Ответы (1)


Дело в ваших условиях.

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, то он не будет пытаться выполнять другие сравнения и сразу войдет в блок.

person A Friend    schedule 18.10.2016