DataGridView 单元格值的数值比较计算不正确
Numeric Comparison of DataGridView Cell Value Evaluates Incorrectly
如果温度 >=7,我想在 datagridview 单元格上放置背景颜色。
我正在使用以下代码,它在 7.01 到 9.99 的温度下工作正常,但如果温度为 10.01 及以上,则不会显示背景颜色。感谢任何帮助。
Private Sub ReeferDGridview_CellFormatting(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellFormattingEventArgs) Handles ReeferDGridview.CellFormatting
If e.RowIndex >= 0 AndAlso e.ColumnIndex = Me.ReeferDGridview.Columns("Temperature").Index Then
If e.Value IsNot Nothing Then
Dim LStatus As String = e.Value.ToString
Select Case LStatus
Case Is >= 7
Me.ReeferDGridview.Rows(e.RowIndex).DefaultCellStyle.BackColor = Color.Maroon
Me.ReeferDGridview.Rows(e.RowIndex).DefaultCellStyle.ForeColor = Color.White
Case Else
Me.ReeferDGridview.Rows(e.RowIndex).DefaultCellStyle.BackColor = Nothing
Me.ReeferDGridview.Rows(e.RowIndex).DefaultCellStyle.ForeColor = Color.Black
End Select
End If
End If
End Sub
现在可以了。我添加以下代码:
Dim LStatus As String = e.Value.ToString
Dim number As Double
Double.TryParse(LStatus, number)
您的问题在于您将网格中的数值放入 String
变量,然后使用它与 Case
语句中的数值进行比较。
重要说明:如果您 Option Strict
切换 On
,您的代码将不会编译,因为它会提醒您您正在这样做。
因此,当您的代码运行时,它实际上是将一个字符串与另一个字符串进行比较。 >(大于)运算符将按字母顺序或字符代码值顺序进行测试(取决于选项比较设置)
所以你的代码实际上是这样做的
"9.99" > "7" 'evaluates to True
"10" > "7" 'evaluates to False
要解决此问题,您只需为 LStatus
:
使用数字类型
Dim LStatus As Single = CSng(e.Value.ToString)
如果温度 >=7,我想在 datagridview 单元格上放置背景颜色。
我正在使用以下代码,它在 7.01 到 9.99 的温度下工作正常,但如果温度为 10.01 及以上,则不会显示背景颜色。感谢任何帮助。
Private Sub ReeferDGridview_CellFormatting(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellFormattingEventArgs) Handles ReeferDGridview.CellFormatting
If e.RowIndex >= 0 AndAlso e.ColumnIndex = Me.ReeferDGridview.Columns("Temperature").Index Then
If e.Value IsNot Nothing Then
Dim LStatus As String = e.Value.ToString
Select Case LStatus
Case Is >= 7
Me.ReeferDGridview.Rows(e.RowIndex).DefaultCellStyle.BackColor = Color.Maroon
Me.ReeferDGridview.Rows(e.RowIndex).DefaultCellStyle.ForeColor = Color.White
Case Else
Me.ReeferDGridview.Rows(e.RowIndex).DefaultCellStyle.BackColor = Nothing
Me.ReeferDGridview.Rows(e.RowIndex).DefaultCellStyle.ForeColor = Color.Black
End Select
End If
End If
End Sub
现在可以了。我添加以下代码:
Dim LStatus As String = e.Value.ToString
Dim number As Double
Double.TryParse(LStatus, number)
您的问题在于您将网格中的数值放入 String
变量,然后使用它与 Case
语句中的数值进行比较。
重要说明:如果您 Option Strict
切换 On
,您的代码将不会编译,因为它会提醒您您正在这样做。
因此,当您的代码运行时,它实际上是将一个字符串与另一个字符串进行比较。 >(大于)运算符将按字母顺序或字符代码值顺序进行测试(取决于选项比较设置)
所以你的代码实际上是这样做的
"9.99" > "7" 'evaluates to True
"10" > "7" 'evaluates to False
要解决此问题,您只需为 LStatus
:
Dim LStatus As Single = CSng(e.Value.ToString)