65.9K
CodeProject 正在变化。 阅读更多。
Home

更改DataGrid单元格的背景颜色

2002年4月29日

viewsIcon

407499

downloadIcon

7219

如何根据DataGrid单元格的值更改其背景颜色。

Sample Image - Custom_DataGridColumnStyl.jpg

在本文中,我将展示如何更改 DataGrid 中特定单元格的背景颜色。为此,首先需要创建从 DataGridTextBoxColumnDataGridColumnStyle 派生的类。然后需要重写这些类的 Paint() 方法。请注意,此方法有三个重载版本。 

在此方法中,首先可以使用 GetColumnValueAtRow 方法检查列中单元格的值,然后设置所需的画笔,填充单元格矩形,最后使用适当的字体写入文本。以下是我使用的示例代码:

protected override void Paint(Graphics g, Rectangle Bounds, CurrencyManager Source,
                              int RowNum, Brush BackBrush, Brush ForeBrush, 
                              bool AlignToRight) 
{
    
    bool bdel = (bool) GetColumnValueAtRow(Source, RowNum);

    if(bdel == true)
        BackBrush = Brushes.Coral;
    else
        BackBrush = Brushes.White;

    g.FillRectangle(BackBrush, Bounds.X, Bounds.Y, Bounds.Width, Bounds.Height);

    System.Drawing.Font font = new Font(System.Drawing.FontFamily.GenericSansSerif, 
                                        (float)8.25 );
    g.DrawString( bdel.ToString(), font, Brushes.Black, Bounds.X, Bounds.Y);
}

在这里,我使用一个值为 bool 的列,并为 true 单元格更改颜色。您也可以非常轻松地更改它们的字体。 

您还可以使用 DataGridTableStyleDataGridColumnStyle 类更改 DataGrid 的整体样式。以下函数演示了这一点:

private void CreateDataGridStyle() 
{
    DataGridColumnStyle GridDelColumn;
    DataGridColumnStyle GridSeqStyle;
    DGStyle = new DataGridTableStyle();  //DGStyle is DataGridTableStyle

    DGStyle.MappingName = "Table1";

    GridSeqStyle = new DataGridTextBoxColumn();
    GridSeqStyle.MappingName = "Column1";
    GridSeqStyle.HeaderText = "Column1";
    GridSeqStyle.Width = 100;
    DGStyle.GridColumnStyles.Add(GridSeqStyle);

    PropertyDescriptorCollection pcol = this.BindingContext[myDataSet, 
                                             "Table1"].GetItemProperties();

    GridDelColumn = new ColumnStyle(pcol["Table1"]);
    GridDelColumn.MappingName = "Column2";
    GridDelColumn.HeaderText = "Column2";
    GridDelColumn.Width = 100;
    DGStyle.GridColumnStyles.Add(GridDelColumn);

    DGStyle.AllowSorting         = true;
    DGStyle.RowHeadersVisible    = true;
}

然后将样式添加到 DataGrid:

CreateDataGridStyle();
myDataGrid.TableStyles.Add(DGStyle);

myDataGrid.SetDataBinding(myDataSet,"Table1");
© . All rights reserved.