zoukankan      html  css  js  c++  java
  • 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有不同的着色标志。

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

  • 相关阅读:
    【WP8】关于类库本地化问题
    【WP8】富文本功能实现
    【WP8】换肤功能的实现
    【WP8】图片缓存控件
    【WP8】图片压缩处理
    【WP8】让TextBox文本支持滑动(Scroll)
    <正则吃饺子> :关于Guava中 Joiner 和 Splitter 的简单使用
    <正则吃饺子> :关于前端往后端传递布尔值参数的问题
    <正则吃饺子>:关于使用powerDesign连接oracle数据库,导出数据表结构(ER图吧)
    <正则吃饺子>:关于集合的简单整理总结
  • 原文地址:https://www.cnblogs.com/vinsonLu/p/3547862.html
Copyright © 2011-2022 走看看