有图有真相:
关键点:使用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有不同的着色标志。
这个处理过程进行了两次循环,诸位有更好的方法,承蒙赐教。