在 VB.NET 中避免 DBNull?

Posted

技术标签:

【中文标题】在 VB.NET 中避免 DBNull?【英文标题】:Avoid DBNull in VB.NET? 【发布时间】:2021-10-02 04:48:29 【问题描述】:

我想根据条件更改 GridView 中单元格的颜色。如果年龄小于 70,则单元格背景颜色将为 Color.Pink,否则为 Color.Lime。我在 SQL Server 中有一个表,其中包含 Age 列,数据类型为 nvarchar(20)。这是我的代码:

Private Sub GridView1_RowCellStyle(sender As Object, e As RowCellStyleEventArgs) Handles GridView1.RowCellStyle
        Try
            If e.Column.FieldName = "Age" Then

                If e.CellValue < 70 Then
                    e.Appearance.BackColor = Color.Pink
                ElseIf e.CellValue = "" Then
                    e.Appearance.BackColor = Color.White
                Else
                    e.Appearance.BackColor = Color.Lime
                End If
            End If
        Catch ex As Exception
            MessageBox.Show(ex.ToString)
        End Try   
    End Sub

它正在工作,但是每次读取Age 列中没有值的行时,它都会给我错误operator '&lt;' is not defined for type 'dbnull' and type 'integer'。所以我添加了ElseIf e.CellValue = "" Then 来检查是否有一行没有价值,但它仍然给我同样的错误。我可以使用Try Catch 绕过错误,但我想解决这个问题,因为它可能会在将来带来问题。

截图:

【问题讨论】:

看看这个有类似问题的答案here,类似于If NOT IsDbNull(e.CellValue) Then ... 【参考方案1】:

您可以放心地忽略空(Nothing 和 DBNull.Value)值,如下所示:

Private Sub GridView1_RowCellStyle(sender As Object, e As RowCellStyleEventArgs) Handles GridView1.RowCellStyle
    If e.CellValue Is Nothing OrElse e.CellValue Is DBNull.Value Then Return
    'Try
    If e.Column.FieldName = "Age" Then
        If e.CellValue < 70 Then
            e.Appearance.BackColor = Color.Pink
        ElseIf e.CellValue = "" Then
            e.Appearance.BackColor = Color.White
        Else
            e.Appearance.BackColor = Color.Lime
        End If
    'End If
    'Catch ex As Exception
    '    MessageBox.Show(ex.ToString)
    'End Try
    End If
End Sub

【讨论】:

以上是关于在 VB.NET 中避免 DBNull?的主要内容,如果未能解决你的问题,请参考以下文章

C#/VB.NET 将PDF转为Excel

如何在c#中避免多个windows窗体实例

避免在字符串值上选择大小写

加载 DataTable 时使用默认列值以避免 Null

如何将 vb.net 中日期的空值传递给 sql 存储过程?

如何确定 VB.Net DataRow 中是不是存在列