|
 |
栏目导栏 |
|
| |
|
|
|
|
 |
资料搜索 |
|
| |
|
|
|
|
 |
热门文章 |
|
| |
|
|
|
|
 |
最新文章 |
|
| |
|
|
|
| |
| |
|
|
|
|
近来项目用到了一个类似WEB控件DataGrid中自定义行或列的颜色的功能,然而应用却是在WIN的窗体下,实现起来无法使用类似JavaScript的脚本注册的功能来动态完成,十分着急,察看了CSDN的一些关于WinForm下的关于DataGrid的资料,看到这样的一篇介绍DG结构的美文,题目是《Henry手记:WinForm Datagrid结构剖析》,作者是韩睿(Latitude),其中介绍了WIN DG的颜色的定义,但是主要是针对每一个Cell的。 WV5Linux联盟 WV5Linux联盟 我们需要的则是标记某一行的数据,用颜色突出显示,所以作了部分改动,现在把部分代码张贴出来供大家参考: WV5Linux联盟 WV5Linux联盟 1. 基础类出自韩睿: WV5Linux联盟 WV5Linux联盟 URL: http://www.csdn.net/develop/read_article.asp?id=15686 WV5Linux联盟 WV5Linux联盟 Public Class DataGridColoredTextBoxColumn WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 Inherits DataGridTextBoxColumn WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 Public rowcollection As New Collection() WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 Public BackColor() As Color WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 Public ForeColor() As Color WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 Private Function GetText(ByVal Value As Object) As String WV5Linux联盟 WV5Linux联盟 If TypeOf (Value) Is System.DBNull Then WV5Linux联盟 WV5Linux联盟 Return NullText WV5Linux联盟 WV5Linux联盟 ElseIf Value Is Nothing Then WV5Linux联盟 WV5Linux联盟 Return "" WV5Linux联盟 WV5Linux联盟 Else WV5Linux联盟 WV5Linux联盟 Return Value.ToString WV5Linux联盟 WV5Linux联盟 End If WV5Linux联盟 WV5Linux联盟 End Function WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 Protected Overloads Overrides Sub Paint(ByVal g As System.Drawing.Graphics, ByVal bounds As System.Drawing.Rectangle, _ WV5Linux联盟 WV5Linux联盟 ByVal source As System.Windows.Forms.CurrencyManager, _ WV5Linux联盟 WV5Linux联盟 ByVal rowNum As Integer, _ WV5Linux联盟 WV5Linux联盟 ByVal backBrush As System.Drawing.Brush, _ WV5Linux联盟 WV5Linux联盟 ByVal foreBrush As System.Drawing.Brush, _ WV5Linux联盟 WV5Linux联盟 ByVal alignToRight As Boolean) WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 Dim text As String WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 text = GetText(GetColumnValueAtRow(source, rowNum)) WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 backBrush = New SolidBrush(TextBox.BackColor) WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 foreBrush = New SolidBrush(TextBox.ForeColor) WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 ReDim Preserve BackColor(rowcollection.Count) WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 ReDim Preserve ForeColor(rowcollection.Count) WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 Dim i As Integer = 1 WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 Do While (i <= rowcollection.Count) WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 If rowNum = Val(rowcollection.Item(i)) Then WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 If Not BackColor(i - 1).IsEmpty Then WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 backBrush = New SolidBrush(BackColor(i - 1)) WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 End If WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 If Not ForeColor(i - 1).IsEmpty Then WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 foreBrush = New SolidBrush(ForeColor(i - 1)) WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 End If WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 End If WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 i += 1 WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 Loop WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 MyBase.PaintText(g, bounds, text, backBrush, foreBrush, alignToRight) WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 End Sub WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 End Class WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 2.关于行颜色定义的类: WV5Linux联盟 WV5Linux联盟 Imports System.Windows.Forms WV5Linux联盟 WV5Linux联盟 Namespace Truck_WEB WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 Public Class DrawDGClass WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 Public Class ReDrawDataDridControls : Inherits DataGridColoredTextBoxColumn WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 Public Sub DrawCorol(ByRef DG As DataGrid, Optional ByVal CurrentRowindex As Integer = 0) WV5Linux联盟 WV5Linux联盟 '设置选中的行的颜色,默认是第一行选中。 WV5Linux联盟 WV5Linux联盟 Dim dt As DataTable WV5Linux联盟 WV5Linux联盟 Dim ts As New DataGridTableStyle() WV5Linux联盟 WV5Linux联盟 ts.AllowSorting = False WV5Linux联盟 WV5Linux联盟 Dim aColumnTextColumn As DataGridColoredTextBoxColumn WV5Linux联盟 WV5Linux联盟 dt = CType(DG.DataSource, DataTable) WV5Linux联盟 WV5Linux联盟 ts.MappingName = CType(DG.DataSource, DataTable).TableName WV5Linux联盟 WV5Linux联盟 DG.TableStyles.Clear() WV5Linux联盟 WV5Linux联盟 Dim numCols As Integer WV5Linux联盟 WV5Linux联盟 numCols = dt.Columns.Count WV5Linux联盟 WV5Linux联盟 Dim i, j As Integer WV5Linux联盟 WV5Linux联盟 i = 0 WV5Linux联盟 WV5Linux联盟 j = 0 WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 Do While (i < numCols) WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 aColumnTextColumn = New DataGridColoredTextBoxColumn() WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 Dim rowindex As Integer = 0 WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 For rowindex = 0 To dt.Rows.Count - 1 WV5Linux联盟 WV5Linux联盟 Dim StrSel As String WV5Linux联盟 WV5Linux联盟 Dim MyForeCorol, MyBackCorol As Color WV5Linux联盟 WV5Linux联盟 aColumnTextColumn.rowcollection.Add(rowindex) WV5Linux联盟 WV5Linux联盟 If rowindex = CurrentRowindex Then WV5Linux联盟 WV5Linux联盟 MyForeCorol = Color.White WV5Linux联盟 WV5Linux联盟 MyBackCorol = Color.DarkSlateBlue WV5Linux联盟 WV5Linux联盟 else WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 MyForeCorol = Color.DarkSlateBlue WV5Linux联盟 WV5Linux联盟 MyBackCorol = Color.White WV5Linux联盟 WV5Linux联盟 End If WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 ReDim Preserve aColumnTextColumn.ForeColor(aColumnTextColumn.rowcollection.Count) WV5Linux联盟 WV5Linux联盟 ReDim Preserve aColumnTextColumn.BackColor(aColumnTextColumn.rowcollection.Count) WV5Linux联盟 WV5Linux联盟 aColumnTextColumn.ForeColor(rowindex) = MyForeCorol WV5Linux联盟 WV5Linux联盟 aColumnTextColumn.BackColor(rowindex) = MyBackCorol WV5Linux联盟 WV5Linux联盟 Next WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 '要更改列头名,请改下句的HeaderText值 WV5Linux联盟 WV5Linux联盟 aColumnTextColumn.HeaderText = dt.Columns(i).ColumnName WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 aColumnTextColumn.MappingName = dt.Columns(i).ColumnName WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 ts.GridColumnStyles.Add(aColumnTextColumn) WV5Linux联盟 WV5Linux联盟 i = (i + 1) WV5Linux联盟 WV5Linux联盟 Loop WV5Linux联盟 WV5Linux联盟 DG.TableStyles.Add(ts) WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 End Sub WV5Linux联盟 WV5Linux联盟 End Class WV5Linux联盟 WV5Linux联盟 End Class WV5Linux联盟 WV5Linux联盟 End Namespace WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 以上是设定选中单行的颜色为反色,各位还可以借题发挥一下!例如设置颜色,等等。 WV5Linux联盟 WV5Linux联盟 在此向《Henry手记:WinForm Datagrid结构剖析》的作者韩睿致谢! WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 WV5Linux联盟 以后我会尽量完善这个DrawDG的类,为大家提供方便!
Linux联盟收集整理 ,转贴请标明原始链接,如有任何疑问欢迎来本站Linux论坛讨论 |
|
|
|
|
|