zoukankan      html  css  js  c++  java
  • VB datagrid指定行着色

    有图有真相:

    关键点:使用datagrid的FetchRowStyle委托。

    (Form界面的datagrid名称:dgv)

    使用FetchRowStyle委托,要先打开开关:

    dgv.FetchRowStyles = True

    然后可以在FetchRowStyle委托里面更改datagrid每一行的单元格格式:

    Private Sub dgv_FetchRowStyle(ByVal sender As Object, ByVal e As C1.Win.C1TrueDBGrid.FetchRowStyleEventArgs) Handles dgv.FetchRowStyle
            If dgv.Columns("HighLighte").CellValue(e.Row) = 1 Then
                e.CellStyle.BackColor = Color.Yellow
            End If
    
            If dgv.Columns("HighLighte").CellValue(e.Row) = 2 Then
                e.CellStyle.BackColor = Color.YellowGreen
            End If
        End Sub

    本例子是按照Lot No相同的record进行着色,在数据表里面增加一个着色标志:HighLighte,处理数据如下样子:

    columns:Lot No      ......   HighLighte

    data:

         BLI0011    ......          0

         BLI0012    ......          0

           BLI0016    ......          1

         BLI0016    ......          1

           BLI0016    ......          1

           BLI0016    ......          1

           BLI0017    ......          2

           BLI0017    ......          2

             .    ......     .

             .    ......     .

    然后在FetchRowStyle委托里面根据着色标志HighLighte进行着色。

    为了处理成上面的结果,本人循环了两次,第一次处理的数据结果:

    columns:Lot No      ......   HighLighte

    data:

         BLI0011    ......          0

         BLI0012    ......          0

           BLI0016    ......          1

         BLI0016    ......          2

           BLI0016    ......          3

           BLI0016    ......          4

           BLI0017    ......          1

           BLI0017    ......          2

             .    ......     .

             .    ......     .

    code:

    Private Sub dgvHighLighte(ByRef dgvData As DataTable)
            Dim cstord As String = ""
            Dim count As Integer = 0
            Dim colorFlg As Integer = 0
            For i As Integer = 0 To dgvData.Rows.Count - 1
                If dgvData.Rows(i).Item("cstord") <> cstord Then
                    cstord = dgvData.Rows(i).Item("cstord")
                    count = 0
                    colorFlg = 0
                Else
                    count += 1
                    colorFlg += 1
                End If
                If count > 0 Then
                    dgvData.Rows(i - 1).Item("HighLighte") = colorFlg
                    dgvData.Rows(i).Item("HighLighte") = colorFlg + 1
                End If
            Next
            dgvData.AcceptChanges()
        End Sub

    第二次处理数据的code:

    Private Sub getNullColumns(ByRef dgvData As DataTable)
            Dim colorFlg As Integer = 2
            For Each row As DataRow In dgvData.Rows
                If row.Item("HighLighte") = 1 Then
                    If colorFlg = 1 Then
                        colorFlg = 2
                    Else
                        colorFlg = 1
                    End If
                End If
                If row.Item("HighLighte") >= 1 Then
                    row.Item("HighLighte") = colorFlg
                End If
            Next
            dgvData.AcceptChanges()
        End Sub

    对每行的HighLighte进行判断,如果HighLighte=1就更改着色标志值,这样就可以令相同LotNo的record有相同的着色标志,相邻的不同lotNo的record有不同的着色标志。

    这个处理过程进行了两次循环,诸位有更好的方法,承蒙赐教。

  • 相关阅读:
    前端工程师需要的技能
    微信小程序
    前端问题总结
    vue面试题
    vue 双数据绑定原理
    路由配置5步
    chrome浏览器自动填充失效问题
    spring 登录提示 Bad credentials
    spring 项目tomcat 8.0.2 发布报错:Could not initialize class org.hibernate.validator.engine.ConfigurationImpl
    spring tiles界面为空白
  • 原文地址:https://www.cnblogs.com/vinsonLu/p/3547862.html
Copyright © 2011-2022 走看看