如何根据数据内容改变DataGrid中行的颜色!
如何根据数据内容改变DataGrid中行的颜色!
我想根据我某一列的内容来设置不同的颜色加以区分数据显示。
问题点数:50、回复次数:14Top
1 楼zhengoodman(伤心小箭--甩一个人需要理由吗?)回复于 2006-03-20 13:20:36 得分 10
http://topic.csdn.net/t/20040914/10/3370132.html
是用C#做的改变行的颜色.可以参考一下.
http://topic.csdn.net/t/20040714/09/3172700.html
如何取得datagrid中得某一行中某一列得值。(C#做的asp.net的例子)
取得指定行指定列的值后,根据值判断,让其显示指定的颜色即可.
以上两个例子虽然没用vb.net但都是基于CLR的.相信稍做修改就可以用了.
Top
2 楼Gerryjiang(下一站)回复于 2006-03-20 13:28:47 得分 10
重载System.Windows.Forms.DataGridTextBoxColumn paint事件
Protected Overloads Overrides Sub Paint(ByVal g As Graphics, ByVal Bounds As Rectangle, ByVal Source As CurrencyManager, ByVal RowNum As Integer, ByVal BackBrush As Brush, ByVal ForeBrush As Brush, ByVal AlignToRight As Boolean)
Dim bdel As String = CType(GetColumnValueAtRow(Source, RowNum), String)
Try
'Dim bdel As Boolean = True
If bdel <> "" Then
If InStr(bdel, vbCrLf & "x ") > 0 Then
BackBrush = Brushes.Coral
If InStr(bdel, vbCrLf & "x 0") > 0 Then
BackBrush = Brushes.Green
End If
Else
BackBrush = Brushes.CadetBlue
End If
Else
BackBrush = Brushes.White
End If
g.FillRectangle(BackBrush, Bounds.X, Bounds.Y, Bounds.Width, Bounds.Height)
Dim font As System.Drawing.Font = New Font(System.Drawing.FontFamily.GenericSansSerif, CType(11, Single), FontStyle.Bold)
g.DrawString(bdel.ToString, font, Brushes.Black, Bounds.X, Bounds.Y)
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
并将这个style赋给datagrid
Top
3 楼yifanlxj(微观工作室)回复于 2006-03-20 13:32:04 得分 0
我先研究一下。如果解决回头结帖!Top
4 楼yifanlxj(微观工作室)回复于 2006-03-20 13:42:49 得分 0
我要根据数据库中的内容来改变某些特定行的颜色。Top
5 楼yifanlxj(微观工作室)回复于 2006-03-20 20:42:28 得分 0
还有人再讲述的没有?我看的不太懂。Top
6 楼Samen168(Code to coding)回复于 2006-03-20 20:49:20 得分 0
BS比较简单,CS的话Gerryjiang(下一站)的方法可行Top
7 楼yifanlxj(微观工作室)回复于 2006-03-20 21:21:02 得分 0
Dim bdel As String = CType(GetColumnValueAtRow(Source, RowNum), String)说这一句中的GetColumnValueAtRow未定义。
InStr(bdel, vbCrLf & "x 0") 和InStr(bdel, vbCrLf & "x ")是什么意思?Top
8 楼Gerryjiang(下一站)回复于 2006-03-20 23:13:00 得分 0
InStr(bdel, vbCrLf & "x 0") 和InStr(bdel, vbCrLf & "x ")是什么意思?
不要太关注这句话。
关键是重载System.Windows.Forms.DataGridTextBoxColumn
Paint事件按你所需要的去写。
主要就是定义brush绘图Top
9 楼kjq_vb(跟着MS走)回复于 2006-03-21 01:04:49 得分 5
InStr(bdel, vbCrLf & "x 0") 和InStr(bdel, vbCrLf & "x ")是什么意思?
instr是个查找字符串函数,意思是在bdel字符串中查找vbcrlf & "x 0",vbcrlf是回车换行,并返回查找到的位置,找不到就返回0Top
10 楼yifanlxj(微观工作室)回复于 2006-03-21 08:26:44 得分 0
Gerryjiang(下一站)
请再帮一下忙,两个地方不明白:
1.这个定义放在什么地方,完整的声明如何写?
2.提示GetColumnValueAtRow未定义该如何解决?
我试着将这个定义放在FrmIcm中,将名称改为:DataGrid1_Paint(),但提示不能要Overrides关键字。放在FrmIcm中是否可以。
Protected Overloads Overrides Sub Paint(ByVal g As Graphics, ByVal Bounds As Rectangle, ByVal Source As CurrencyManager, ByVal RowNum As Integer, ByVal BackBrush As Brush, ByVal ForeBrush As Brush, ByVal AlignToRight As Boolean)Top
11 楼jekeywood(各回各家,各找各妈!)回复于 2006-03-21 11:19:44 得分 5
objDataGridTableStyle.AlternatingBackColor = Color.WhiteSmoke '交替的显示表格每行的背景
objDataGridTableStyle.DataGrid.TableStyles.Add(objDataGridTableStyle)Top
12 楼yifanlxj(微观工作室)回复于 2006-03-21 13:51:13 得分 0
晕!没有再说两句!Top
13 楼Gerryjiang(下一站)回复于 2006-03-21 15:38:35 得分 20
Sample:
Imports System
Imports System.ComponentModel
Imports System.Drawing
Imports System.Windows.Forms
Public Class ColumnStyle
Inherits DataGridTextBoxColumn
Public Sub New(ByVal pcol As PropertyDescriptor)
End Sub
Protected Overrides Sub Abort(ByVal RowNum As Integer)
End Sub
Protected Overrides Function Commit(ByVal DataSource As CurrencyManager, ByVal RowNum As Integer) As Boolean
Return True
End Function
Protected Overloads Overrides Sub Edit(ByVal source As CurrencyManager, ByVal rowNum As Integer, ByVal bounds As Rectangle, ByVal [readOnly] As Boolean, ByVal instantText As String, ByVal cellIsVisible As Boolean)
End Sub
Protected Overrides Function GetMinimumHeight() As Integer
Return 65
End Function
Protected Overrides Function GetPreferredHeight(ByVal g As Graphics, ByVal Value As Object) As Integer
Return 65
End Function
Protected Overrides Function GetPreferredSize(ByVal g As Graphics, ByVal Value As Object) As Size
Dim cellSize As Size = New Size(105, 65)
Return cellSize
End Function
Protected Overloads Overrides Sub Paint(ByVal g As Graphics, ByVal Bounds As Rectangle, ByVal Source As CurrencyManager, ByVal RowNum As Integer, ByVal BackBrush As Brush, ByVal ForeBrush As Brush, ByVal AlignToRight As Boolean)
Dim bdel As String = CType(GetColumnValueAtRow(Source, RowNum), String)
Try
'Dim bdel As Boolean = True
If bdel <> "" Then
If InStr(bdel, vbCrLf & "x ") > 0 Then
BackBrush = Brushes.Coral
If InStr(bdel, vbCrLf & "x 0") > 0 Then
BackBrush = Brushes.Green
End If
Else
BackBrush = Brushes.CadetBlue
End If
Else
BackBrush = Brushes.White
End If
g.FillRectangle(BackBrush, Bounds.X, Bounds.Y, Bounds.Width, Bounds.Height)
Dim font As System.Drawing.Font = New Font(System.Drawing.FontFamily.GenericSansSerif, CType(10, Single), FontStyle.Bold)
g.DrawString(bdel.ToString, font, Brushes.Black, Bounds.X, Bounds.Y)
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
End ClassTop
14 楼Gerryjiang(下一站)回复于 2006-03-21 15:40:48 得分 0
datagrid应用:
将style给datagrid,
Private DGStyle As DataGridTableStyle
CreateDataGridStyle(m_rows, m_cols)
dbdRack.TableStyles.Add(DGStyle)
Public Sub CreateDataGridStyle(ByVal row As Integer, ByVal col As Integer)
Try
Dim GridSeqStyle(col - 1) As DataGridColumnStyle
DGStyle = New DataGridTableStyle
DGStyle.MappingName = "Rack"
DGStyle.GridLineStyle = System.Windows.Forms.DataGridLineStyle.Solid
DGStyle.GridLineColor = Color.Gray
Dim i As Integer
Dim pcol As PropertyDescriptorCollection = Me.BindingContext(myDataSet, "Rack").GetItemProperties
'GridSeqStyle = New DataGridTextBoxColumn
For i = 0 To col - 1
GridSeqStyle(i) = New ColumnStyle(pcol(0))
GridSeqStyle(i).MappingName = "Rack" & i
GridSeqStyle(i).Width = 105
DGStyle.GridColumnStyles.Add(GridSeqStyle(i))
Next
DGStyle.RowHeadersVisible = False
'DGStyle.PreferredRowHeight = 30
Catch ex As Exception
Throw ex
End Try
End Sub
Top




