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
相关产品推荐
相关产品推荐

