C# Windows Form中如何设置datagrid的各行颜色.
2004-12-10 23:35
288 查看
摘自 中国.NET论坛
C# Windows Form中如何设置datagrid的各行颜色.
using System; ......
using System;
using System.Windows.Forms;
using System.Drawing;
using System.Data;
using System.Collections;
/*用法自定义dataGrid行颜色
* oleDbDataAdapter1.Fill(dataSet11,"学生");
DataGridTableStyle dgt = new DataGridTableStyle();
dgt.MappingName = "学生";
YKDataGridTextBoxColumn dgtbc = new YKDataGridTextBoxColumn();
dgtbc.MappingName = "姓名";
dgtbc.HeaderText= "NAME";
dgtbc.keyColumn=4;
dgtbc.mycolorList.Add(new YKColor(true,Color.Red,Color.Azure));
dgtbc.mycolorList.Add(new YKColor(false,Color.Blue,Color.Brown));
dgt.GridColumnStyles.Add(dgtbc);
dgtbc = new YKDataGridTextBoxColumn();
dgtbc.MappingName = "编号";
dgtbc.HeaderText= "id";
dgtbc.keyColumn=4;
dgtbc.mycolorList.Add(new YKColor(true,Color.Red,Color.Azure));
dgtbc.mycolorList.Add(new YKColor(false,Color.Blue,Color.Brown));
dgt.GridColumnStyles.Add(dgtbc);
DataGridBoolColumn db =
new DataGridBoolColumn();
db.HeaderText= "性别";
db.Width= 150;
db.MappingName = "性别";
dgt.GridColumnStyles.Add(db);
dataGrid1.TableStyles.Add(dgt);
*/
namespace YEKE
{
/// <summary>
/// YKDataGridTextBoxColumn 的摘要说明。
/// </summary>
public class YKColor:object
{
public object val;
public Color foreColor;
public Color backColor;
public YKColor(object v,Color forecolor,Color backcolor)
{
val=v;
foreColor=forecolor;
backColor=backcolor;
}
}
public class YKColorList
{
private ArrayList colorList;
public YKColorList()
{
colorList=new ArrayList();
}
public void Add(YKColor t)
{
colorList.Add(t);
}
public YKColor getColor(object v)
{
YKColor ykc=new YKColor(0,Color.Black,Color.White);
try
{
if(colorList.Count>0)
foreach(YKColor o in colorList )
{
if(o.val.Equals(v))
{
ykc.foreColor=o.foreColor;
ykc.backColor=o.backColor;
break;
}
}
}
catch
{}
return ykc;
}
}
public class YKDataGridTextBoxColumn : DataGridTextBoxColumn
{
public int keyColumn;
public YKColorList mycolorList;
public YKDataGridTextBoxColumn()
{
keyColumn=0;
mycolorList=new YKColorList();
}
protected override void Paint(Graphics g, Rectangle bounds,
CurrencyManager source, int rowNum,
Brush backBrush, Brush foreBrush,
bool alignToRight)
{
/**/ DataRowView drv = source.List[rowNum] as DataRowView;
object expr = drv.Row[keyColumn];
SolidBrush bb,fb;
YKColor ykc=mycolorList.getColor(expr);
bb=new SolidBrush(ykc.backColor);
fb=new SolidBrush(ykc.foreColor);
base.Paint(g, bounds, source, rowNum,
bb, fb, alignToRight);
}
}
public class YKDataGridBoolColumn : DataGridBoolColumn
{
private SolidBrush trueBrush = Brushes.Blue as SolidBrush;
private SolidBrush falseBrush = Brushes.Yellow as SolidBrush;
private DataColumn expressionColumn = null;
private static int count = 0;
public Color FalseColor
{
get
{
return falseBrush.Color;
}
set
{
falseBrush = new SolidBrush(value);
Invalidate();
}
}
public Color TrueColor
{
get
{
return trueBrush.Color;
}
set
{
trueBrush = new SolidBrush(value);
Invalidate();
}
}
public YKDataGridBoolColumn() : base ()
{
count ++;
}
// This will work only with a DataSet or DataTable.
// The code is not compatible with IBindingList implementations.
public string Expression
{
get
{
return this.expressionColumn == null ? String.Empty :
this.expressionColumn.Expression;
}
set
{
if (expressionColumn == null)
AddExpressionColumn(value);
else
expressionColumn.Expression = value;
if (expressionColumn != null &&
expressionColumn.Expression.Equals(value))
return;
Invalidate();
}
}
private void AddExpressionColumn(string value)
{
// Get
4000
the grid's data source. First check for a null
// table or data grid.
if (this.DataGridTableStyle == null ||
this.DataGridTableStyle.DataGrid == null)
return;
DataGrid myGrid = this.DataGridTableStyle.DataGrid;
DataView myDataView = ((CurrencyManager)
myGrid.BindingContext[myGrid.DataSource,
myGrid.DataMember]).List
as DataView;
// This works only with System.Data.DataTable.
if (myDataView == null)
return;
// If the user already added a column with the name
// then exit. Otherwise, add the column and set the
// expression to the value passed to this function.
DataColumn col = myDataView.Table.Columns["__Computed__Column__"];
if (col != null)
return;
col = new DataColumn("__Computed__Column__" + count.ToString());
myDataView.Table.Columns.Add(col);
col.Expression = value;
expressionColumn = col;
}
// override the OnPaint method to paint the cell based on the expression.
protected override void Paint(Graphics g, Rectangle bounds,
CurrencyManager source, int rowNum,
Brush backBrush, Brush foreBrush,
bool alignToRight)
{
bool trueExpression = false;
bool hasExpression = false;
DataRowView drv = source.List[rowNum] as DataRowView;
hasExpression = this.expressionColumn != null &&
this.expressionColumn.Expression != null &&
!this.expressionColumn.Expression.Equals(String.Empty);
Console.WriteLine(string.Format("hasExpressionValue {0}",hasExpression));
// Get the value from the expression column.
// For simplicity, we assume a True/False value for the
// expression column.
if (hasExpression)
{
object expr = drv.Row[expressionColumn.ColumnName];
trueExpression = expr.Equals("True");
}
// Let the DataGridBoolColumn do the painting.
if (!hasExpression)
base.Paint(g, bounds, source, rowNum,
backBrush, foreBrush, alignToRight);
// Paint using the expression color for true or false, as calculated.
if (trueExpression)
base.Paint(g, bounds, source, rowNum,
trueBrush, foreBrush, alignToRight);
else
base.Paint(g, bounds, source, rowNum,
falseBrush, foreBrush, alignToRight);
}
}
}
C# Windows Form中如何设置datagrid的各行颜色.
using System; ......
using System;
using System.Windows.Forms;
using System.Drawing;
using System.Data;
using System.Collections;
/*用法自定义dataGrid行颜色
* oleDbDataAdapter1.Fill(dataSet11,"学生");
DataGridTableStyle dgt = new DataGridTableStyle();
dgt.MappingName = "学生";
YKDataGridTextBoxColumn dgtbc = new YKDataGridTextBoxColumn();
dgtbc.MappingName = "姓名";
dgtbc.HeaderText= "NAME";
dgtbc.keyColumn=4;
dgtbc.mycolorList.Add(new YKColor(true,Color.Red,Color.Azure));
dgtbc.mycolorList.Add(new YKColor(false,Color.Blue,Color.Brown));
dgt.GridColumnStyles.Add(dgtbc);
dgtbc = new YKDataGridTextBoxColumn();
dgtbc.MappingName = "编号";
dgtbc.HeaderText= "id";
dgtbc.keyColumn=4;
dgtbc.mycolorList.Add(new YKColor(true,Color.Red,Color.Azure));
dgtbc.mycolorList.Add(new YKColor(false,Color.Blue,Color.Brown));
dgt.GridColumnStyles.Add(dgtbc);
DataGridBoolColumn db =
new DataGridBoolColumn();
db.HeaderText= "性别";
db.Width= 150;
db.MappingName = "性别";
dgt.GridColumnStyles.Add(db);
dataGrid1.TableStyles.Add(dgt);
*/
namespace YEKE
{
/// <summary>
/// YKDataGridTextBoxColumn 的摘要说明。
/// </summary>
public class YKColor:object
{
public object val;
public Color foreColor;
public Color backColor;
public YKColor(object v,Color forecolor,Color backcolor)
{
val=v;
foreColor=forecolor;
backColor=backcolor;
}
}
public class YKColorList
{
private ArrayList colorList;
public YKColorList()
{
colorList=new ArrayList();
}
public void Add(YKColor t)
{
colorList.Add(t);
}
public YKColor getColor(object v)
{
YKColor ykc=new YKColor(0,Color.Black,Color.White);
try
{
if(colorList.Count>0)
foreach(YKColor o in colorList )
{
if(o.val.Equals(v))
{
ykc.foreColor=o.foreColor;
ykc.backColor=o.backColor;
break;
}
}
}
catch
{}
return ykc;
}
}
public class YKDataGridTextBoxColumn : DataGridTextBoxColumn
{
public int keyColumn;
public YKColorList mycolorList;
public YKDataGridTextBoxColumn()
{
keyColumn=0;
mycolorList=new YKColorList();
}
protected override void Paint(Graphics g, Rectangle bounds,
CurrencyManager source, int rowNum,
Brush backBrush, Brush foreBrush,
bool alignToRight)
{
/**/ DataRowView drv = source.List[rowNum] as DataRowView;
object expr = drv.Row[keyColumn];
SolidBrush bb,fb;
YKColor ykc=mycolorList.getColor(expr);
bb=new SolidBrush(ykc.backColor);
fb=new SolidBrush(ykc.foreColor);
base.Paint(g, bounds, source, rowNum,
bb, fb, alignToRight);
}
}
public class YKDataGridBoolColumn : DataGridBoolColumn
{
private SolidBrush trueBrush = Brushes.Blue as SolidBrush;
private SolidBrush falseBrush = Brushes.Yellow as SolidBrush;
private DataColumn expressionColumn = null;
private static int count = 0;
public Color FalseColor
{
get
{
return falseBrush.Color;
}
set
{
falseBrush = new SolidBrush(value);
Invalidate();
}
}
public Color TrueColor
{
get
{
return trueBrush.Color;
}
set
{
trueBrush = new SolidBrush(value);
Invalidate();
}
}
public YKDataGridBoolColumn() : base ()
{
count ++;
}
// This will work only with a DataSet or DataTable.
// The code is not compatible with IBindingList implementations.
public string Expression
{
get
{
return this.expressionColumn == null ? String.Empty :
this.expressionColumn.Expression;
}
set
{
if (expressionColumn == null)
AddExpressionColumn(value);
else
expressionColumn.Expression = value;
if (expressionColumn != null &&
expressionColumn.Expression.Equals(value))
return;
Invalidate();
}
}
private void AddExpressionColumn(string value)
{
// Get
4000
the grid's data source. First check for a null
// table or data grid.
if (this.DataGridTableStyle == null ||
this.DataGridTableStyle.DataGrid == null)
return;
DataGrid myGrid = this.DataGridTableStyle.DataGrid;
DataView myDataView = ((CurrencyManager)
myGrid.BindingContext[myGrid.DataSource,
myGrid.DataMember]).List
as DataView;
// This works only with System.Data.DataTable.
if (myDataView == null)
return;
// If the user already added a column with the name
// then exit. Otherwise, add the column and set the
// expression to the value passed to this function.
DataColumn col = myDataView.Table.Columns["__Computed__Column__"];
if (col != null)
return;
col = new DataColumn("__Computed__Column__" + count.ToString());
myDataView.Table.Columns.Add(col);
col.Expression = value;
expressionColumn = col;
}
// override the OnPaint method to paint the cell based on the expression.
protected override void Paint(Graphics g, Rectangle bounds,
CurrencyManager source, int rowNum,
Brush backBrush, Brush foreBrush,
bool alignToRight)
{
bool trueExpression = false;
bool hasExpression = false;
DataRowView drv = source.List[rowNum] as DataRowView;
hasExpression = this.expressionColumn != null &&
this.expressionColumn.Expression != null &&
!this.expressionColumn.Expression.Equals(String.Empty);
Console.WriteLine(string.Format("hasExpressionValue {0}",hasExpression));
// Get the value from the expression column.
// For simplicity, we assume a True/False value for the
// expression column.
if (hasExpression)
{
object expr = drv.Row[expressionColumn.ColumnName];
trueExpression = expr.Equals("True");
}
// Let the DataGridBoolColumn do the painting.
if (!hasExpression)
base.Paint(g, bounds, source, rowNum,
backBrush, foreBrush, alignToRight);
// Paint using the expression color for true or false, as calculated.
if (trueExpression)
base.Paint(g, bounds, source, rowNum,
trueBrush, foreBrush, alignToRight);
else
base.Paint(g, bounds, source, rowNum,
falseBrush, foreBrush, alignToRight);
}
}
}
相关文章推荐
- C# 如何给Word文档设置背景颜色和背景图片
- Flex中如何通过selectionColor和selectionDisabledColor样式设置DataGrid的行选中与无效时颜色的例子
- C# 如何在PDF文档中根据关键字查找文本并给文本设置背景颜色
- VC/MFC如何设置对话框背景颜色
- 如何用C#设置IE的代理
- eclipse如何设置系统类名的颜色?
- C#中判断密码字符强度 并设置对应颜色
- android 如何设置颜色的透明度!
- windows phone textblock C#设置颜色以及换行
- Win7下如何设置护眼的电脑豆沙绿界面?保护眼睛的颜色设置教程
- Android 如何设置状态栏颜色和标题栏颜色一致
- c# winform中如何判断DataGrid当前选中的是空白行,并根据选择控制按钮是否可用
- VC/MFC如何设置对话框背景颜色
- 如何设置QWidget的背景颜色
- 如何在Xib中设置Button的属性(圆角以及背景颜色)
- 如何设置对话框背景色以及控件颜色
- C#设置字体和字体颜色和字体样式
- C# Win 设置DATAGRID禁止排序
- C# WinForm中DataGrid列设置(转载)
- 【C#】Visual Studio 2012环境下如何设置代码行号