2016-10-18 2 views
1

Lorsque vous vérifiez la valeur d'une colonne de style case à cocher dans un UltraGrid, j'utilise le code suivant dans la méthode BeforeRowsDeleted, pour définir un booléen, puis en fonction de la valeur booléenne, l'une des deux méthodes delete est exécutée.Opérateur = n'est pas défini pour le type DBNull et Boolean, mais non = opérateur est présent

Cependant, je reçois une exception système disant

opérateur = est pas défini pour le type DBNull et Boolean

Je l'ai vu cette erreur plusieurs fois avant, mais je m confus parce que, bien que lorsque je traverse le code, je peux voir la valeur stockée est en fait un System.DBNull, il n'y a pas de signe égal est utilisé?

Pourquoi cette erreur se produit-elle et où le code est-il incorrect?

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 

J'ai aussi essayé de définir la valeur par programme dans la méthode InitializeLayout de la grille, mais qui n'a pas résolu la situation

Répondre

2

Le problème réside dans vos conditions.

IsDBNull(ugProducts.ActiveRow.Cells("isNew").Value) est évaluée à -> True

Ensuite, vous essayez de le faire:

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

Comment l'énoncé ci-dessus peut-être vrai si la valeur est DBNull? C'est là que le code est défaillant, car le Value est DBNull et vous essayez de le comparer à True (C'est là le = est)

Vous devez court la condition à l'aide OrElse si elle est DBNull:

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

S'il est DBNull alors il n'essaiera pas d'effectuer les autres comparaisons et entrera directement dans le bloc.

+0

Oui, triée, merci –