Excerpted from China .NET Forum C # Windows Form How to set the colors of DataGrid .using system; ......
using System; using System.Windows.Forms; using System.Drawing; using System.Data; using System.Collections; / * Use custom color line dataGrid * oleDbDataAdapter1.Fill (dataSet11, "students"); DataGridTableStyle dgt = new DataGridTableStyle (); dgt.MappingName = "student"; YKDataGridTextBoxColumn dgtbc = new YKDataGridTextBoxColumn (); dgtbc.MappingName = "name"; 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 = "number"; DGTBC.Headertext = "ID"; dgtbc.keycolumn = 4; DGTBC.MYCOLORLST.ADD (New Ykcolor (True, color.red, color.azure); DGTBC.MYCOLORLST.Add (New Ykcolor (false, color.blue, color.brown); DGT.GridColumnStyles.Add (DGTBC); DataGridBoolColumn DB = New DataGridBoolColumn (); db.Headertext = "gender"; db.width = 150; db.mappingname = "gender"; DGT.GridColumnStyles.Add (db); DATAGRID1.TABLESTYLES.ADD (DGT); * / namespace Yeke { ///
/// 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) {ykc. process (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 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 (color! = Null) return; col = new datacolumn ("__ computed__column___" Count.tos tring ()); 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 &&!