同事的一个项目需要将DataGridView单元格中的内容分不同颜色显示,想了想只有重绘了。
这种方法还可以用做合并单元格。
参考代码:
private void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{
if (e.RowIndex == 0 && e.ColumnIndex >= 0)
{
int left = e.CellBounds.Left;
int top = e.CellBounds.Top;
int right = e.CellBounds.Right;
int bottom = e.CellBounds.Bottom;
e.Graphics.FillRectangle(new SolidBrush(Color.White), e.CellBounds);
e.Handled = true;
Brush gridBrush = new SolidBrush(this.dataGridView1.GridColor);
Pen gridLinePen = new Pen(gridBrush);
e.Graphics.DrawLine(gridLinePen, right - 1,
top, right - 1,
bottom - 1);
e.Graphics.DrawLine(gridLinePen, left,
bottom - 1, right,
bottom - 1);
Brush b1 = new SolidBrush(Color.Black);
e.Graphics.DrawString((String)e.Value, e.CellStyle.Font,
b1, left + 2,
top + 1, StringFormat.GenericDefault);
Brush b2 = new SolidBrush(Color.Red);
e.Graphics.DrawString((String)e.Value, e.CellStyle.Font,
b2, left + 2,
top + 10, StringFormat.GenericDefault);
}
DataGridViewSelectedCellCollection dgvscc = this.dataGridView1.SelectedCells;
foreach (DataGridViewCell dgvc in dgvscc)
{
if (e.RowIndex == 0
&& e.RowIndex == dgvc.RowIndex
&& e.ColumnIndex == dgvc.ColumnIndex)
{
int left = e.CellBounds.Left;
int top = e.CellBounds.Top;
int right = e.CellBounds.Right;
int bottom = e.CellBounds.Bottom;
// 绘制背景,覆盖单元格区域
e.Graphics.FillRectangle(new SolidBrush(Color.FromArgb(10,36,106)), e.CellBounds);
// 绘制边框
Brush gridBrush = new SolidBrush(this.dataGridView1.GridColor);
Pen gridLinePen = new Pen(gridBrush);
e.Graphics.DrawLine(gridLinePen, right - 1,
top, right - 1,
bottom - 1);
e.Graphics.DrawLine(gridLinePen, left,
bottom - 1, right,
bottom - 1);
// 绘制文字
Brush b1 = new SolidBrush(Color.White);
e.Graphics.DrawString((String)e.Value, e.CellStyle.Font,
b1, left + 2,
top + 1, StringFormat.GenericDefault);
Brush b2 = new SolidBrush(Color.White);
e.Graphics.DrawString((String)e.Value, e.CellStyle.Font,
b2, left + 2,
top + 10, StringFormat.GenericDefault);
}
}
e.Handled = true;
}