2016-10-18 2 views
1

Wenn ich den Wert einer Checkbox-Style-Spalte in einem UltraGrid überprüfe, verwende ich den folgenden Code in der BeforeRowsDeleted-Methode, um einen booleschen Wert festzulegen, Abhängig vom booleschen Wert wird dann eine von 2 Löschmethoden ausgeführt.Operator = ist nicht für den Typ DBNull und Boolean definiert, aber no = Operator ist vorhanden

Allerdings bin ich ein System Ausnahme bekommen

Operator sagen = ist nicht für den Typ DBNull und Boolean definiert

ich diesen Fehler ein paar Mal zuvor gesehen haben, aber ich Ich bin verwirrt, weil, obwohl ich beim Durchlaufen des Codes sehe, dass der gespeicherte Wert tatsächlich ein System.DBNull ist, wird kein Gleichheitszeichen verwendet?

Warum tritt dieser Fehler auf und wo ist der Code falsch?

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 

Ich habe auch versucht, den Wert programmatisch in der InitializeLayout Methode des Gitters zu setzen, aber das ist nicht die Situation haben zu beheben

Antwort

2

Das Problem in Ihren Bedingungen liegt.

IsDBNull(ugProducts.ActiveRow.Cells("isNew").Value) ausgewertet -> True

Dann versuchen Sie zu tun:

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

Wie kann die obige Aussage wahr sein, wenn der Wert DBNull ist? Dies ist, wo der Code versagt, weil die ValueDBNull ist und Sie versuchen, es zu True zu vergleichen (Das ist, wo die = ist)

Sie kurze müssen den Zustand mit OrElse wenn es DBNull ist:

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

Wenn es DBNull ist, dann wird es nicht versuchen, die anderen Vergleiche zu tun, und wird den Block sofort betreten.

+0

Ja, sortierte es, danke –

Verwandte Themen