我想在格式化Datagrid(即加入样式表)时, 改变符合条件行的Forecolor和Backcolor

wuxuetie 2004-12-04 04:21:04
(i为列,j为行)如果 值>8,然后,改变这些行的Forecolor和Backcolor
以下是我程序中部分代码

If i = 5 Then
For j = 0 To tb.Rows.Count - 1
If (tb.Rows(j)(i)) > 8 Then
'//这里如何写
End If
Next
End If
...全文
155 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
athossmth 2004-12-10
  • 打赏
  • 举报
回复
要在datagridde 的itemdatabound里用item(i)
wuxuetie 2004-12-06
  • 打赏
  • 举报
回复
to swzlxm(守望者)

items(i), Datagrid不认识
liuhelh 2004-12-04
  • 打赏
  • 举报
回复
另外呢,如果你参照henry写类呢,有一个小缺陷,就是一重新排序,被颜色标记的行是不变的,就是说假如第三行被标定为红色.如果点击列标题重新排序,那么第三行仍为红色,不能与数据对应,你可以在重新写类的时候想办法解决.我正在想..呵呵.
liuhelh 2004-12-04
  • 打赏
  • 举报
回复
基类:添加了颜色处理的类(继承自datagrid).vb.net.很容易专成c#的 ,如果你能看懂vb.net的话应该比较容易.

Imports System.Drawing.Color
Module Module1

'该类的主要作用除了上文所说的重载Paint外,最主要的目标在于如何将用户的要求(cell的位置,cell的背景色、前景色)保存下来,
' 在绘制textbox的时候传递进Paint函数中去
Public Class DataGridColoredTextBoxColumn '定义继承类

Inherits DataGridTextBoxColumn '继承接口

Public rowcollection As New Collection '用于存放行号的集合也就是要更改颜色的行号,列号是gridcolumnstyle中自带的故可绘制出每一个cell的颜色.

Public BackColor() As Color '用于存放背景色的集合,索引与行号集号一致(集合索引减1)

Public ForeColor() As Color '用于存放前景色的集合,索引与行号集号一致 也就是说其索引对应的颜色值与行号集合同样索引号的行向对应
'也就是说将颜色应用到与其有相同索引号的行号中..
'汗....



Private Function GetText(ByVal Value As Object) As String

'为进行重绘读出textbox中的内容,这个函数是增加容错能力的,与实现机制无关

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) 'Preserve 关键字用于防止在重新设置数组维数时清除数组内容

ReDim Preserve ForeColor(rowcollection.Count)

Dim i As Integer = 1 '集合索引从1开始

Do While (i <= rowcollection.Count)

If rowNum = Val(rowcollection.Item(i)) Then '如果当前要绘制的行在rowcollection集合中存在

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


End Module

henry写的类.只是添加了一点儿注释.
如果你有兴趣的话请查看(henry文档):http://blog.csdn.net/latitude/category/12135.aspx
还有:http://dev.csdn.net/develop/article/18/18512.shtm

都是vb.net写的希望你能看懂.
swzlxm 2004-12-04
  • 打赏
  • 举报
回复
e.items.cells(i).ForeColor= color.fromRGB(222,222,222);
e.items.cells(i).BackColor= color.fromRGB(222,222,222);


or

DataGrid.items(i).cells(j)).BackColor= color.fromRGB(222,222,222);
allanli 2004-12-04
  • 打赏
  • 举报
回复
刚好有一个属性专门针对你这个需求的

http://community.csdn.net/Expert/topic/3434/3434223.xml?temp=.8876612

16,718

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧