DataGrid中为cell设置颜色

dtqgfnet 2006-04-22 02:41:31
大家都知道DataGrid控件通过其属性TableStyles控制每个对应的DataTable的显示风格,而每个TableStyle又通过其属性GridColumnStyles控制每一列的显示风格,但却没有属性或方法可以直接设置每行数据的显示风格。这或许是出于使用方法考虑(在绑定数据源前当然不知道有哪些行,行中有哪些数据),或许是出于性能考虑(为每行建立显示风格索引的代价会比较大),或者是其他考虑(我没想到的^_^)。
但实际工作中这种需求很多,比如“当资源小于某个临界值就变红色显示”之类的。如果可以做到改变行的颜色,应该能满足这些需求中的大部分。然而按照常规方法,在一列当中,每个单元格(即每行)的显示风格都是相同的。改变DataGrid控件行颜色的基本技巧就是重写DataGridColumnStyle的Paint方法,更改其中的foreBrush和backBrush两个参数,再重新调用基类的Paint方法。当然实际操作中我们不能直接继承DataGridColumnStyle类,而是要从它的子类DataGridTextBoxColumn,DataGridBoolColumn中继承(可惜我们不能在这个继承层次中插入我们自己的类)。
如下所示:
public class DataGridColoredTextBoxColumn : DataGridTextBoxColumn
{
//重载绘制单元格的函数,如果该单元格所在行符合ColoredView中的条件,就改变前景和背景色
protected override void Paint(System.Drawing.Graphics g, System.Drawing.Rectangle bounds, System.Windows.Forms.CurrencyManager source, int rowNum, System.Drawing.Brush backBrush, System.Drawing.Brush foreBrush, bool alignToRight)
{
/*在这里加入判断条件,决定是否更改颜色
if (...) backBrush = new SolidBrush(...); foreBrush = new SolidBrush(...);
*/ //调用基类的绘制函数
base.Paint(g, bounds, source, rowNum, backBrush, foreBrush, alignToRight);
}
}
目前我不知道IF 里条件怎么写,请兄弟们帮一下
...全文
226 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
copico 2006-04-23
  • 打赏
  • 举报
回复
收藏了
Knight94 2006-04-23
  • 打赏
  • 举报
回复
to 在这里加入判断条件,决定是否更改颜色

你可以用this.TextBox.Text来进行判断
  • 打赏
  • 举报
回复
关注中
mabinbin 2006-04-23
  • 打赏
  • 举报
回复
相当关注!
marvelstack 2006-04-23
  • 打赏
  • 举报
回复
可以看这里的实现方式,原理还是需要继承DataGridTextBoxColumn。
http://www.syncfusion.com/FAQ/WindowsForms/FAQ_c44c.aspx
zhqs1000 2006-04-22
  • 打赏
  • 举报
回复
你设置每一列的也可以
e.item.cell[]
GXY2005 2006-04-22
  • 打赏
  • 举报
回复
DataGridViewCellStyle style=new DataGridViewCellStyle ();
style.BackColor = Color.Red ;

//然后取行号
dataGridView1.Rows[2].DefaultCellStyle = style;

111,097

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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