2016-10-18 18 views
1

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

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

Оператор = не определено для типа DBNull и Boolean

Я видел эту ошибку несколько раз, но я m запутался, потому что, хотя, пройдя через код, я вижу, что хранимое значение фактически является 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 сетки, но это не исправить ситуацию

ответ

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

+0

Да, отсортировано, спасибо –