DataGrid中由某列的值设定行的颜色(转)

DataGrid中由某列的值设定行的颜色(转)

  为了实现.Net window DataGrid 的某一行可以根据该行某列的值的内容设定该行颜色的功能.

  

  先贴一个连接,里面有DataGrid很多功能扩充的解决方案Windows Forms Datagrid

  

  不过没有我这个需求的解决方案,最后终于还是在同事的帮助下搞定了.

  

  由某一个单元格的值设定该单元格的颜色的实现我就不贴了,上面的连接里面有解决方案.

  下面是由某列的值设定整行颜色的一个解决方案. 关键是在定制的DataGridTextBoxColumn里面添加一个DataView的属性,另外重载Paint() .

  在使用DataGridTextBoxColumn的时候,将DataGrid绑定的DataView赋值给它.

  

  public class public class DataGridColoredTextBoxColumn : DataGridTextBoxColumn

  {

  private System.Data.DataView m_bindDataView;

  public DataView BindingDataView

  {

  get

  {

  return m_bindDataView;

  }

  set

  {

  m_bindDataView = value;

  }

  }

  

  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)

  {

  // the idea is to conditionally set the foreBrush and/or backbrush

  // depending upon some crireria on the cell value

  // Here, we color anything that begins with a letter higher than 'F'

  try

  {

  //从DataView中取值,"ItemType"为行的名称

  string colValue = this.BindingDataView[rowNum]["ItemType"].ToString();

  char val = colValue[0];

  

  if( val > 'F' ) //如果首字母大于 'F'

  {

  backBrush = new SolidBrush(Color.BlueViolet );

  foreBrush = new SolidBrush(Color.White);

  }

  }

  catch(Exception ex)

  {

  //empty catch

  }

  finally

  {

  // make sure the base class gets called to do the drawing with

  // the possibly changed brushes

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

  }

  }

  

  }

  

  使用的例子

  DataGridColoredTextBoxColumn colExceptionType = new DataGridColoredTextBoxColumn();

  colItemType.BindingDataView = dtOrderItem.DefaultView; //将table的view赋值

  colItemType.HeaderText =“ItemType”;

  colItemType.MappingName = “ItemType“;

  colItemType.Width = 90;

  colItemType.NullText = "";

  tablestyle.GridColumnStyles.Add(colItemType);
posted @ 2009-12-28 09:19  孖仔爸爸  阅读(364)  评论(0)    收藏  举报