将DataGrid中满足条件的行设为不同的背景色(WinForm)

原创 2004年06月23日 06:54:00

{

//...

//使用DataGridTableStyle 显示DataGrid.

   DataGridTableStyle tableStyle = new DataGridTableStyle();
   tableStyle.MappingName = "customers";

   int numCols = _dataSet.Tables["customers"].Columns.Count;
   DataGridCellColorTextBoxColumn columnTextColumn ;
   for(int i = 0; i < numCols; ++i)
   {
    columnTextColumn = new DataGridCellColorTextBoxColumn();
    columnTextColumn.HeaderText = _dataSet.Tables["customers"].Columns[i].ColumnName;
    columnTextColumn.MappingName = _dataSet.Tables["customers"].Columns[i].ColumnName;

    //为每个单元格建立设置背景色的事件.
    columnTextColumn.CheckCellColor += new CellColorEventHandler(SetColorValues);

    tableStyle.GridColumnStyles.Add(columnTextColumn);
   }
   
   dataGrid1.TableStyles.Clear();
   dataGrid1.TableStyles.Add(tableStyle);

   dataGrid1.DataSource = _dataSet.Tables["customers"];

}

 

  public void SetColorValues(object sender, DataGridCellColorEventArgs e)
  {
   //根据条件, 将相关行设置不同的背景色.
   //下例为国家(datagrid中第9列)为Mexico的行设置为红色,USA的行设为黄色.
   if(Convert.ToString(dataGrid1[e.Row,8]) == "Mexico")
    e.BackColor = Color.Red;
   else if(Convert.ToString(dataGrid1[e.Row,8]) == "USA")
    e.BackColor = Color.Yellow;
  }

 public class DataGridCellColorEventArgs : EventArgs
 {
  private int _row;
  private Color _backcolor;

  public DataGridCellColorEventArgs(int row, Color val)
  {
   _row = row;
   _backcolor = val;
  }
  public int Row
  {
   get{ return _row;}
   set{ _row = value;}
  }
  public Color BackColor
  {
   get{ return _backcolor;}
   set{ _backcolor = value;}
  }
 }

 

 //为事件建立委托.
 public delegate void CellColorEventHandler(object sender, DataGridCellColorEventArgs e);

 public class DataGridCellColorTextBoxColumn : DataGridTextBoxColumn
 {
  public event CellColorEventHandler CheckCellColor;

  public DataGridCellColorTextBoxColumn()
  {
  }

  //继承DataGridTextBoxColumn的Pain事件.
  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(CheckCellColor != null)
   {
    //重绘画时,设置当前行的背景色
    DataGridCellColorEventArgs e = new DataGridCellColorEventArgs(rowNum, Color.White);
    CheckCellColor(this, e);
    
    if(e.BackColor != Color.White)
     backBrush = new SolidBrush(e.BackColor);
   }

   base.Paint(g, bounds, source, rowNum, backBrush, foreBrush, alignToRight);
  }

  protected override void Edit(System.Windows.Forms.CurrencyManager source, int rowNum, System.Drawing.Rectangle bounds, bool readOnly, string instantText, bool cellIsVisible)
  {
   base.Edit(source, rowNum, bounds, readOnly, instantText, cellIsVisible);
  }
 }

WPF-DataGrid设置各行变色

我在stackoverflow.com中找到的资料: The ItemContainerStyle is applied to the elements generated by the Items...
  • huyu107
  • huyu107
  • 2016年05月12日 15:04
  • 2422

Easyui 去掉datagrid 行的样式,并点击checked 改边行颜色!

标签: --最近客户提出的需求 全选高亮样式太丑,每行选中不需要背景图片颜色,字体变黑色,未选中变灰色。 先把代码和改变后的图片 贴出来。   /* 初始化DataFrid数据 */ ...
  • zhpengfei0915
  • zhpengfei0915
  • 2016年03月31日 15:51
  • 1943

JQuery easyUI datagrid 多选下禁止选中某些行

JQuery easyUI
  • fwk1010
  • fwk1010
  • 2016年07月20日 18:26
  • 4686

【easyui】datagrid设置背景色后,无选中效果

var selectRowIndex = undefined;//保存被选中的行的索引 var selectRowIndexColor = {};//用来保存行的背景色(因为表格中可能有多个背...
  • xuexiiphone
  • xuexiiphone
  • 2016年12月21日 20:12
  • 2085

改变Flex DataGrid 行的背景色

现在在F4、F3中改变DataGrid行的背景色还是很麻烦,不能像改变列(column)那么直接setBackColor就可以了。不过可以通过复写DataGrid类的drawRowBackground...
  • cruelchen
  • cruelchen
  • 2013年07月12日 10:49
  • 350

DataGridView行设置背景颜色+Var类型+筛选

关键字DefaultCellStyle常用事件RowPrePaint() RowPrePaint()方法在发生任何单元格之前,行绘制时引发事件。 在自动添加新行时,背景颜色也会跟着绘制,在这个事件...
  • qq_23833037
  • qq_23833037
  • 2016年08月13日 01:51
  • 790

WPF DataGrid使用 自动显示行号、全选、三级联动、拖拽

1.DataGrid的使用自动显示行号(修复删除行时行号显示不正确) dgTool.LoadingRow += new EventHandlerDataGridRowEventArgs (dgTool...
  • lanshengsheng2012
  • lanshengsheng2012
  • 2013年10月24日 10:46
  • 6393

改变Flex DataGrid 行的背景色

现在在F4、F3中改变DataGrid行的背景色还是很麻烦,不能像改变列(column)那么直接setBackColor就可以了。不过可以通过复写DataGrid类的drawRowBackground...
  • cruelchen
  • cruelchen
  • 2013年07月12日 10:49
  • 377

扩展 easyui 控件系列:为datagrid 增加过滤行

此功能还为真正完成,起到抛砖引玉的效果,发动大家的力量把这个功能完善起来,效果图如下:   基本上就是扩展了 datagrid.view 中的onAfterRender 这个事件,...
  • u010486495
  • u010486495
  • 2016年07月09日 17:46
  • 1461

Oracle db 使用转换函数和条件表达式

• 描述SQL 提供的各类转换函数 • 使用TO_CHAR、TO_NUMBER和TO_DATE转换函数 • 在SELECT语句中应用条件表达式 隐式和显式数据类型转换 ...
  • rlhua
  • rlhua
  • 2013年10月19日 10:05
  • 5101
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:将DataGrid中满足条件的行设为不同的背景色(WinForm)
举报原因:
原因补充:

(最多只允许输入30个字)