• 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有不同的着色标志。

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

  • 相关阅读:
    html标签嵌套规则
    关于setTimeout和Promise执行顺序问题
    vue基础
    new操作符具体干了什么
    ["1", "2", "3"].map(parseInt)
    线性表
    树的一些概念和性质
    A*与IDA*
    树上启发式合并
    启发式合并
  • 原文地址:https://www.cnblogs.com/vinsonLu/p/3547862.html
Copyright © 2020-2023  润新知