您的位置:首页 > 其它

DataGridView合并表头实现

2008-10-30 15:25 441 查看
在网上找到这段代码先收藏一下。自己要显示的效果


也是根据下面一段代码改变过来的。所以标记一下。

二维表头的实现

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 = "Year";

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

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: