您的位置:首页 > 编程语言 > VB

VB datagrid指定行着色

2014-02-13 12:17 375 查看
有图有真相:



关键点:使用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有不同的着色标志。



这个处理过程进行了两次循环,诸位有更好的方法,承蒙赐教。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: