You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VB.Net:如何将GridView中两列作为数值进行比较?

解决GridView行背景色按数值比较的问题

嘿,这个坑我之前踩过!你完全找对了问题根源——直接用e.Row.Cells(6).Text > e.Row.Cells(7).Text是字符串字典序比较,不是数值大小比较。比如字符串"500"会被判定为大于"1000",因为第一个字符'5'的ASCII码比'1'高,这就导致了你看到的“首位数字大就变色”的奇怪现象。

之所以Number/Integer属性会报错,是因为TableCell控件本身就没有这些属性,它只存文本内容,得我们自己把文本转换成数值类型再比较。

推荐的兼容写法(安全且健壮)

推荐用TryParse方法来转换,这样即使单元格是空值或者非数字内容,也不会抛出异常,代码更稳定。以下是完整的示例代码:

Protected Sub YourGridView_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles YourGridView.RowDataBound
    ' 只处理数据行,跳过表头、页脚等非数据行
    If e.Row.RowType = DataControlRowType.DataRow Then
        ' 获取单元格文本并去除首尾空格
        Dim cell6Content As String = e.Row.Cells(6).Text.Trim()
        Dim cell7Content As String = e.Row.Cells(7).Text.Trim()
        
        Dim value6 As Decimal
        Dim value7 As Decimal
        
        ' 尝试将文本转换为Decimal(支持整数和小数,通用性更强)
        If Decimal.TryParse(cell6Content, value6) AndAlso Decimal.TryParse(cell7Content, value7) Then
            ' 现在是真正的数值比较
            If value6 > value7 Then
                e.Row.BackColor = ColorTranslator.FromHtml("#FDD533")
            End If
        Else
            ' 可选:处理转换失败的情况(比如单元格是空的或不是数字)
            ' 例如给这类行标个灰色提示:
            ' e.Row.BackColor = Color.LightGray
        End If
    End If
End Sub

补充说明

  • 如果你的数据确定是整数,也可以把Decimal换成Integer,用Integer.TryParse来转换。
  • 一定要先判断RowType,不然表头、页脚行也会被处理,可能引发不必要的错误。
  • 用Trim()去除文本首尾空格,避免因为单元格里的空格导致转换失败。

内容的提问来源于stack exchange,提问作者hjh93

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 05:19:59