DataGrid中为cell设置颜色
大家都知道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 里条件怎么写,请兄弟们帮一下