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);
为了实现.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);
浙公网安备 33010602011771号