• Winforms平台界面开发技巧分享:如何更改GridControl行的颜色


    下载DevExpress v19.2完整版

    DevExpress Winforms Controls 内置140多个UI控件和库,完美构建流畅、美观且易于使用的应用程序。想要体验?点击下载>>

    问题:

    在VB Windows Form项目上工作时,有以下代码,该代码应该为带有NextCalibrationDate <= to today's date(在这种情况下只有两行)的行提供红色背景色,但是此效果没有实现。当调试应用程序时,代码似乎可以正常工作,但是两行的颜色并未更改为红色,目前想知道是否是因为在单元格中设置日期方式的问题。

    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

    仅供参考,这是用来设置NextCalibrationDate的代码:

    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()
    DevExpress Winforms使用技巧教程
    DevExpress Winforms使用技巧教程
    解决办法:

    为确保满足条件,请在更改e.Appearance.BackColor属性的行中插入一个断点。在特定情况下,RowStyle事件提供的外观设置的优先级低于其他外观设置。启用e.HighPriority选项确保外观设置的最高优先级。此外,由于每个可见行都会引发RowStyle事件,因此您无需循环执行代码。

    在代码结尾处设置e.HighPriority = True也可以解决此问题,并且不依赖循环。

    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

    DevExpress技术交流群:775869749      欢迎一起进群讨论

    扫描关注DevExpress中文网微信公众号,及时获取最新动态及最新资讯

    DevExpress中文网微信
  • 相关阅读:
    通过gridview隐藏的一列的值,来设置该行的背景颜色。
    修改js文件后,浏览器不会立即发现js文件更新,连接状态是200 (from cache)缓存
    getDate()显示格式
    设置gridview自动分页的页码不显示
    数据库字段类型,如果是bool类型,数据库中用bit
    给dropdownlist手动添加一列"请选择"(不是从数据库中读取的数据)
    数据库中使用关键词时注意
    获取服务器控件的id时,遇到使用到模板列取不到的问题
    页面自动刷新代码
    启用IIS的Gzip压缩功能
  • 原文地址:https://www.cnblogs.com/AABBbaby/p/12792455.html
Copyright © 2020-2023  润新知