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

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

原文地址:https://www.cnblogs.com/vinsonLu/p/3547862.html