当前位置: 首页 > 图文教程 > .Net技术 > VB.NET > VB.NET中关于DataGrid颜色的自定义

VB.NET
大话“基于对象”与“面向对象”
VB 内存分配与流读写 代码
VB.NET语法基础
vb.net与c#.net区别
用VB.Net读写数据库
百万程序员的苦恼-选择VB.NET还是C#
VB.net 多线程实例
VB.NET也区会大小写
VB.NET 2005编写定时关机程序
VB.NET控件编程定制拦截击键动作
如何实现.net程序的进程注入
VB.NET 菜单设计初级入门
VB.NET中关于DataGrid颜色的自定义
VB网络编程中Winsock的使用
VB.net编程教程:编写文字加解密程序
VB.NET中快速访问注册表技巧
VB.NET:在VB.NET中串行化对象
VB.NET:在 VB.NET 编程中使用数组
VB.NET:VB.NET路在何方?
大话“基于对象”与“面向对象”

VB.NET 中的 VB.NET中关于DataGrid颜色的自定义


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-08-14   浏览: 431 ::
收藏到网摘: n/a

近来项目用到了一个类似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 
   
  以上是设定选中单行的颜色为反色,各位还可以借题发挥一下!例如设置颜色,等等。