int top = 0;
int left = 0;
int height = 0;
int width1 = 0;
private void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{
#region 重绘datagridview表头
DataGridView dgv = (DataGridView)(sender);
if (e.RowIndex == -1 && (e.ColumnIndex == 3 || e.ColumnIndex == 4)) //在第三和第四列上加了个表头
{
//e.CellStyle.Font = new Font(dataGridView1.DefaultCellStyle.Font, FontStyle.Bold);
//e.CellStyle.WrapMode = DataGridViewTriState.True;
if (e.ColumnIndex == 3)
{
top = e.CellBounds.Top;
left = e.CellBounds.Left;
height = e.CellBounds.Height;
width1 = e.CellBounds.Width;
}
int width2 = this.dataGridView1.Columns[4].Width;
Rectangle rect = new Rectangle(left, top, width1 + width2, e.CellBounds.Height);
using (Brush backColorBrush = new SolidBrush(e.CellStyle.BackColor))
{
//抹去原来的cell背景
e.Graphics.FillRectangle(backColorBrush, rect);
}
using (Pen gridLinePen = new Pen(dgv.GridColor))
{
e.Graphics.DrawLine(gridLinePen, left, top, left + width1 + width2, top);
e.Graphics.DrawLine(gridLinePen, left, top + height / 2, left + width1 + width2, top + height / 2);
e.Graphics.DrawLine(gridLinePen, left + width1, top + height / 2, left + width1, top + height);
//计算绘制字符串的位置
string columnValue = "时间";
SizeF sf = e.Graphics.MeasureString(columnValue, e.CellStyle.Font);
float lstr = (width1 + width2 - sf.Width) / 2;
float rstr = (height / 2 - sf.Height) / 2;
//画出文本框
if (columnValue != "")
{
e.Graphics.DrawString(columnValue, e.CellStyle.Font,
new SolidBrush(e.CellStyle.ForeColor),
left + lstr,
top + rstr,
StringFormat.GenericDefault);
}
//计算绘制字符串的位置
columnValue = "日期";
sf = e.Graphics.MeasureString(columnValue, e.CellStyle.Font);
lstr = (width1 - sf.Width) / 2;
rstr = (height / 2 - sf.Height) / 2;
//画出文本框
if (columnValue != "")
{
e.Graphics.DrawString(columnValue, e.CellStyle.Font,
new SolidBrush(e.CellStyle.ForeColor),
left + lstr,
top + height / 2 + rstr,
StringFormat.GenericDefault);
}
//计算绘制字符串的位置
columnValue = "时间";
sf = e.Graphics.MeasureString(columnValue, e.CellStyle.Font);
lstr = (width2 - sf.Width) / 2;
rstr = (height / 2 - sf.Height) / 2;
//画出文本框
if (columnValue != "")
{
e.Graphics.DrawString(columnValue, e.CellStyle.Font,
new SolidBrush(e.CellStyle.ForeColor),
left + width1 + lstr,
top + height / 2 + rstr,
StringFormat.GenericDefault);
}
}
e.Handled = true;
}
#endregion
}
给dataGridView绑定任意的超过四列的数据集上去,添加 CellPainting 事件,ok,跑起来看下,是不是有表头啦。。看到效果了,想怎么改就怎么改吧。