2015-07-28 119 views
1

如果Temperature> = 7,我想在datagridview單元格上放置背景顏色。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 
+0

開關選項嚴格上 - 這將指導你在你的代碼 –

+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) 
0

它現在正在工作。我添加下面的代碼:

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

您無理由額外轉換。使用Dim number As Double = DirectCast(e.Value,Double)'。因爲你知道'Cell.Value'的原始類型 – Fabio

相關問題