更改DataGrid单元格的背景颜色






4.81/5 (31投票s)
2002年4月29日

407499

7219
如何根据DataGrid单元格的值更改其背景颜色。
在本文中,我将展示如何更改 DataGrid 中特定单元格的背景颜色。为此,首先需要创建从 DataGridTextBoxColumn
或 DataGridColumnStyle
派生的类。然后需要重写这些类的 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
单元格更改颜色。您也可以非常轻松地更改它们的字体。
您还可以使用 DataGridTableStyle
和 DataGridColumnStyle
类更改 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");