首 页 | 新 闻 | 技术中心 | 第二书店 | 《程序员》 | 《开发高手》 | 社 区 | 黄 页 | 人 才
移 动专 题SUNIBM微 软微 创精 华Donews人 邮
我的技术中心 
我的分类 我的文档
全部文章 发表文章
专栏管理 使用说明



 RSS 订阅 
最新文档列表
Windows/.NET
.NET  (rss)    
Visual C++  (rss)    
Delphi  (rss)    
Visual Basic  (rss)    
ASP  (rss)    
JavaScript  (rss)    
Java/Linux
Java  (rss)    
Perl  (rss)    
综合
其他开发语言  (rss)    
文件格式  (rss)    
企业开发
游戏开发  (rss)    
网站制作技术  (rss)    
数据库
数据库开发  (rss)    
软件工程
其他  (rss)    

积极原创作者 
tellmenow (22)
cutemouse (22)
softj (78)
iiprogram (69)
qdzx2008 (50)
goodboy1881 (14)
wangchinaking (58)
fancyhf (1)
harrymeng (41)
yjz0065 (113)
CSDN - 文档中心 - .NET 阅读:5900   评论: 4    参与评论
标题   VB.NET中关于DataGrid颜色的自定义。     选择自 yohomonkey 的 Blog
关键字   改变DataGrid颜色
出处  

 

     近来项目用到了一个类似WEB控件DataGrid中自定义行或列的颜色的功能,然而应用却是在WIN的窗体下,实现起来无法使用类似JavaScript的脚本注册的功能来动态完成,十分着急,察看了CSDN的一些关于WinForm下的关于DataGrid的资料,看到这样的一篇介绍DG结构的美文,题目是《Henry手记:WinForm Datagrid结构剖析》,作者是韩睿(Latitude,其中介绍了WIN  DG的颜色的定义,但是主要是针对每一个Cell的。

我们需要的则是标记某一行的数据,用颜色突出显示,所以作了部分改动,现在把部分代码张贴出来供大家参考:

1.  基础类出自韩睿

URL: http://www.csdn.net/develop/read_article.asp?id=15686

  Public Class DataGridColoredTextBoxColumn

 

            Inherits DataGridTextBoxColumn

 

            Public rowcollection As New Collection()

 

            Public BackColor() As Color

 

            Public ForeColor() As Color

 

 

            Private Function GetText(ByVal Value As Object) As String

                If TypeOf (Value) Is System.DBNull Then

                    Return NullText

                ElseIf Value Is Nothing Then

                    Return ""

                Else

                    Return Value.ToString

                End If

            End Function

 

            Protected Overloads Overrides Sub Paint(ByVal g As System.Drawing.Graphics, ByVal bounds As System.Drawing.Rectangle, _

                ByVal source As System.Windows.Forms.CurrencyManager, _

                ByVal rowNum As Integer, _

                ByVal backBrush As System.Drawing.Brush, _

                ByVal foreBrush As System.Drawing.Brush, _

                ByVal alignToRight As Boolean)

 

 

                Dim text As String

 

                text = GetText(GetColumnValueAtRow(source, rowNum))

 

                backBrush = New SolidBrush(TextBox.BackColor)

 

                foreBrush = New SolidBrush(TextBox.ForeColor)

 

 

                ReDim Preserve BackColor(rowcollection.Count)

 

                ReDim Preserve ForeColor(rowcollection.Count)

 

 

 

                Dim i As Integer = 1

 

                Do While (i <= rowcollection.Count)

 

                    If rowNum = Val(rowcollection.Item(i)) Then

 

                        If Not BackColor(i - 1).IsEmpty Then

 

                            backBrush = New SolidBrush(BackColor(i - 1))

 

                        End If

 

                        If Not ForeColor(i - 1).IsEmpty Then

 

                            foreBrush = New SolidBrush(ForeColor(i - 1))

 

                        End If

 

                    End If

 

                    i += 1

 

                Loop

 

                MyBase.PaintText(g, bounds, text, backBrush, foreBrush, alignToRight)

 

            End Sub

 

        End Class

 

 

2.关于行颜色定义的类:

Imports System.Windows.Forms

Namespace Truck_WEB

 

    Public Class DrawDGClass

 

        Public Class ReDrawDataDridControls : Inherits DataGridColoredTextBoxColumn

 

            Public Sub DrawCorol(ByRef DG As DataGrid, Optional ByVal CurrentRowindex As Integer = 0)

               '设置选中的行的颜色,默认是第一行选中。

                 Dim dt As DataTable

                Dim ts As New DataGridTableStyle()

                ts.AllowSorting = False

                Dim aColumnTextColumn As DataGridColoredTextBoxColumn

                dt = CType(DG.DataSource, DataTable)

                ts.MappingName = CType(DG.DataSource, DataTable).TableName

                DG.TableStyles.Clear()

                Dim numCols As Integer

                numCols = dt.Columns.Count

                Dim i, j As Integer

                i = 0

                j = 0

 

                Do While (i < numCols)

 

                    aColumnTextColumn = New DataGridColoredTextBoxColumn()

 

                    Dim rowindex As Integer = 0

 

 

                    For rowindex = 0 To dt.Rows.Count - 1

                        Dim StrSel As String

                        Dim MyForeCorol, MyBackCorol As Color

                        aColumnTextColumn.rowcollection.Add(rowindex)

                        If rowindex = CurrentRowindex Then

                                MyForeCorol = Color.White

                                MyBackCorol = Color.DarkSlateBlue

                        else

 

                                MyForeCorol = Color.DarkSlateBlue

                                MyBackCorol = Color.White

                        End If

                       

                        ReDim Preserve aColumnTextColumn.ForeColor(aColumnTextColumn.rowcollection.Count)

                        ReDim Preserve aColumnTextColumn.BackColor(aColumnTextColumn.rowcollection.Count)

                        aColumnTextColumn.ForeColor(rowindex) = MyForeCorol

                        aColumnTextColumn.BackColor(rowindex) = MyBackCorol

                    Next

 

 

                    '要更改列头名,请改下句的HeaderText值

                    aColumnTextColumn.HeaderText = dt.Columns(i).ColumnName

 

                    aColumnTextColumn.MappingName = dt.Columns(i).ColumnName

 

                    ts.GridColumnStyles.Add(aColumnTextColumn)

                    i = (i + 1)

                Loop

                DG.TableStyles.Add(ts)

 

            End Sub

        End Class

    End Class

End Namespace

 

 

以上是设定选中单行的颜色为反色,各位还可以借题发挥一下!例如设置颜色,等等。

在此向《Henry手记:WinForm Datagrid结构剖析》的作者韩睿致谢!

 

以后我会尽量完善这个DrawDG的类,为大家提供方便!


相关文章
对该文的评论
lumingming_sz ( 2005-10-14)
请问如何转换成C#的代码,如果会请提供,麻烦了,急!lumingming_sz@163.com
googie ( 2004-11-23)
在webform上行吗?
cindy_yaya ( 2004-10-30)
你好,问一下,如果这样的话,是需要分别单独写两各类出来吗?然后再在form的后台整合?有没有完整的工程源代码?急需解决这个问题,麻烦了,谢谢!cindy_yaya@126.com
imports ( 2003-05-24)
牛牛 牛!