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

原创 2004年06月13日 16:01:00

由于项目需要, 需要对DataGrid的数据行, 按不同的条件以不同的背景色相区别。 由于DataGrid中没有相关的属性和方法可以直接设置,要完成这个功能还挺费些功夫。在网上搜了半天,也没找到解决方案。只好自己动手,丰衣足食了,:) 。研究了半天, 终于搞定它了。好东西不敢独享,特贴出来,希望能给需要的人带来些帮助。

{

//...

//使用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);
  }
 }

Winform DataGrid设计三步曲之三----如何改变DataGrid的背景色

                  Winform DataGrid设计三步曲之三                                        如何改变DataGrid的背景色   ...
  • tjvictor
  • tjvictor
  • 2007年01月22日 13:41
  • 5469

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

{ //... //使用DataGridTableStyle 显示DataGrid.    DataGridTableStyle tableStyle = new DataGridTableStyle...
  • tjdlut
  • tjdlut
  • 2004年06月23日 06:54
  • 594

C# WPF DataGrid 根据某列的值设置行的背景色

最简单的方法是 使用 datagrid的LoadingRow事件。 private void datagrid_LoadingRow(object sender, DataGridRowEv...
  • easyboot
  • easyboot
  • 2016年03月02日 15:01
  • 4789

easyUI 根据一些条件改变DataGrid 行背景颜色

这个教程将向你展示如何改变datagrid组件行样式根据一些条件,谁的listprice 值大于50我们将设置行为不同的颜色. 查看 Demo datagrid的rowStyl...
  • weinichendian
  • weinichendian
  • 2017年04月15日 10:04
  • 1602

EasyUI datagrid 改变行的背景色

easyUI datagrid改变所选列背景色
  • u014548782
  • u014548782
  • 2014年07月16日 11:20
  • 2866

在wpf datagrid中,想要根据一个条件来改变datagrid行的背景颜色

在wpf datagrid中,想要根据一个条件来改变datagrid行的背景颜色 例如根据学生的年龄来修改,年龄小于18岁的,该行为红色显示,如何做到 解决方法 1: 在你需...
  • a771948524
  • a771948524
  • 2013年07月12日 13:05
  • 2232

为DataGride单元格添加背景色 .

为单元格添加背景色   转载位置: http://blog.csdn.net/hongtashan11/article/details/6771951 Flex中的DataGrid可能是...
  • sebastain
  • sebastain
  • 2012年10月12日 17:06
  • 2743

jQuery EasyUI使用教程之根据条件更换数据网格行背景颜色

jQuery EasyUI最新试用版免费下载> 本教程将为大家介绍在某些条件下如何更改数据网格组件的行样式。当listprice值大于50时,我们将为该行设置不同的颜色。 查看jQ...
  • AABBbaby
  • AABBbaby
  • 2016年04月07日 10:18
  • 1263

cxgrid 根据不同条件改变行颜色

procedure TForm3.V1CustomDrawCell(Sender: TcxCustomGridTableView;  ACanvas: TcxCanvas; AViewInfo: Tc...
  • cxb2011
  • cxb2011
  • 2010年07月20日 11:18
  • 2675

在Winform中,获取DataGrid当前选定行对应的数据

我们知道,当使用Datagrid 的时候,往往会使用DataTable,DataSet,DataView作为其数据源,那么当填充后,我们能不能将DataGrid选中行对应的DataSet的数据取出来?...
  • walkinhill
  • walkinhill
  • 2004年10月29日 16:19
  • 2753
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:将DataGrid中满足条件的行设为不同的背景色(WinForm).
举报原因:
原因补充:

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