Winforms平臺界面開發技巧分享:如何更改GridControl行的顏色

點擊“瞭解更多”獲取DevExpress v19.2完整版下載

DevExpress Winforms Controls 內置140多個UI控件和庫,完美構建流暢、美觀且易於使用的應用程序。

問題

在VB Windows Form項目上工作時,有以下代碼,該代碼應該為帶有NextCalibrationDate <= to today's date(在這種情況下只有兩行)的行提供紅色背景色,但是此效果沒有實現。當調試應用程序時,代碼似乎可以正常工作,但是兩行的顏色並未更改為紅色,目前想知道是否是因為在單元格中設置日期方式的問題。


<code>Private Sub GridView1_RowStyle(ByVal sender As Object, ByVal e As DevExpress.XtraGrid.Views.Grid.RowStyleEventArgs) Handles GridView1.RowStyle
Dim nextCalibDate As Date
Dim I As Integer
Dim DataRowCount As Integer = GridView1.DataRowCount
Dim View As GridView = sender
For I = 0 To DataRowCount - 1
If IsDBNull(GridView1.GetRowCellValue(e.RowHandle, colNextCalibrationDt)) Then
'Nothing
Else
nextCalibDate = GridView1.GetRowCellValue(e.RowHandle, colNextCalibrationDt)
If nextCalibDate <= Today.Date Then
If (e.RowHandle >= 0) Then
e.Appearance.BackColor = Color.Red
End If
End If
End If
Next
End Sub/<code>


僅供參考,這是用來設置NextCalibrationDate的代碼:


<code>Dim DataRowCount As Integer = GridView1.DataRowCount
DataRowCount -= 1
Dim DateCalibrated As Date = GridView1.GetRowCellValue(DataRowCount, colDateCalibrated)
Dim NextCalibrationDt As String
'Set NextCalibrationDt
Select Case CalibInterval
Case "D"
NextCalibrationDt = DateAdd(DateInterval.Day, 1, DateCalibrated)
Case "W"
NextCalibrationDt = DateAdd(DateInterval.Day, 7, DateCalibrated)
Case "M"
NextCalibrationDt = DateAdd(DateInterval.Month, 1, DateCalibrated)
Case "6mos"
NextCalibrationDt = DateAdd(DateInterval.Month, 6, DateCalibrated)
Case "Y"
NextCalibrationDt = DateAdd(DateInterval.Year, 1, DateCalibrated)
Case "B"
NextCalibrationDt = DateAdd(DateInterval.Year, 2, DateCalibrated)
Case "36mos"
NextCalibrationDt = DateAdd(DateInterval.Year, 3, DateCalibrated)
Case "N"
NextCalibrationDt = "NULL"
Case "Calibration Not Required"
NextCalibrationDt = "NULL"
Case Else
NextCalibrationDt = "NULL"
End Select
If NextCalibrationDt <> "NULL" Then
NextCalibrationDt = "'" & NextCalibrationDt & "'"
End If
Dim sqlString As String = "UPDATE [ToolingCalibration].[dbo].[tblToolCalibration] SET LastCalibrationDt = '" & DateCalibrated & "', NextCalibrationDt = " & NextCalibrationDt & " where RecordID = '" & ToolIdToEdit & "'"
Dim toolCmd As New SqlCommand(sqlString, connCalibrationRecord)
toolCmd.Connection.Open()
toolCmd.ExecuteNonQuery()
toolCmd.Connection.Close()/<code>


Winforms平臺界面開發技巧分享:如何更改GridControl行的顏色

Winforms平臺界面開發技巧分享:如何更改GridControl行的顏色

解決辦法:

為確保滿足條件,請在更改e.Appearance.BackColor屬性的行中插入一個斷點。在特定情況下,RowStyle事件提供的外觀設置的優先級低於其他外觀設置。啟用e.HighPriority選項確保外觀設置的最高優先級。此外,由於每個可見行都會引發RowStyle事件,因此您無需循環執行代碼。

在代碼結尾處設置e.HighPriority = True也可以解決此問題,並且不依賴循環。


<code>Private Sub GridView1_RowStyle(ByVal sender As Object, ByVal e As DevExpress.XtraGrid.Views.Grid.RowStyleEventArgs) Handles GridView1.RowStyle
Dim nextCalibDate As Date
Dim I As Integer
Dim View As GridView = sender
If IsDBNull(GridView1.GetRowCellValue(e.RowHandle, colNextCalibrationDt)) Then
'Nothing
Else
nextCalibDate = GridView1.GetRowCellValue(e.RowHandle, colNextCalibrationDt)
If nextCalibDate <= Today.Date Then
If (e.RowHandle >= 0) Then
e.Appearance.BackColor = Color.Red
End If
e.HighPriority = True 'override any other formatting
End If
End If
End Sub/<code>




分享到:


相關文章: