VB datagrid指定行着色

时间:2024-01-12 17:38:02

有图有真相:

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) = Then
e.CellStyle.BackColor = Color.Yellow
End If If dgv.Columns("HighLighte").CellValue(e.Row) = 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 =
Dim colorFlg As Integer =
For i As Integer = To dgvData.Rows.Count -
If dgvData.Rows(i).Item("cstord") <> cstord Then
cstord = dgvData.Rows(i).Item("cstord")
count =
colorFlg =
Else
count +=
colorFlg +=
End If
If count > Then
dgvData.Rows(i - ).Item("HighLighte") = colorFlg
dgvData.Rows(i).Item("HighLighte") = colorFlg +
End If
Next
dgvData.AcceptChanges()
End Sub

第二次处理数据的code:

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

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

VB datagrid指定行着色

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