DataGridView单元格值的数字比较评估不正确

时间:2015-07-28 08:02:33

标签: .net vb.net datagridview casting case-statement

如果温度> = 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

2 个答案:

答案 0 :(得分:2)

您的问题在于,您将网格中的数值放入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)

答案 1 :(得分:0)

它现在正在工作。我在下面添加代码:

Dim LStatus As String = e.Value.ToString
Dim number As Double
Double.TryParse(LStatus, number)