using System;
|
using System.Collections.Generic;
|
using System.Drawing;
|
using System.Linq;
|
using System.Text;
|
using System.Threading.Tasks;
|
using System.Windows.Forms;
|
|
namespace WindowsFormsApp1.utils.ui
|
{
|
class DataGridViewHelper
|
{
|
public DataGridViewHelper(DataGridView gridview)
|
{
|
gridview.CellPainting += new DataGridViewCellPaintingEventHandler(gridview_CellPainting);
|
}
|
|
|
int top = 0;
|
int left = 0;
|
int height = 0;
|
int width1 = 0;
|
|
public void gridview_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
|
{
|
#region 重绘datagridview表头
|
DataGridView dgv = (DataGridView)(sender);
|
if (e.RowIndex != -1) return;
|
foreach (TopHeader item in Headers)
|
{
|
if (e.ColumnIndex >= item.Index && e.ColumnIndex < item.Index + item.Span)
|
{
|
if (e.ColumnIndex == item.Index)
|
{
|
top = e.CellBounds.Top;
|
left = e.CellBounds.Left;
|
height = e.CellBounds.Height;
|
}
|
int width = 0;//总长度
|
for (int i = item.Index; i < item.Span + item.Index; i++)
|
{
|
width += dgv.Columns[i].Width;
|
}
|
Rectangle rect = new Rectangle(left, top, width, e.CellBounds.Height);
|
using (Brush backColorBrush = new SolidBrush(e.CellStyle.BackColor)) //Cell背景颜色
|
{
|
//抹去原来的cell背景
|
e.Graphics.FillRectangle(backColorBrush, rect);
|
}
|
using (Pen gridLinePen = new Pen(dgv.GridColor)) //画笔颜色
|
{
|
e.Graphics.DrawLine(gridLinePen, left, top, left + width, top);
|
e.Graphics.DrawLine(gridLinePen, left, top + height / 2, left + width, top + height / 2);
|
e.Graphics.DrawLine(gridLinePen, left, top + height - 1, left + width, top + height - 1); //自定义区域下部横线
|
width1 = 0;
|
e.Graphics.DrawLine(gridLinePen, left - 1, top, left - 1, top + height);
|
for (int i = item.Index; i < item.Span + item.Index; i++)
|
{
|
if (i == 1 || i == 2)
|
{
|
width1 += dgv.Columns[i].Width - 1; //分隔区域首列
|
}
|
else
|
{
|
width1 += dgv.Columns[i].Width;
|
}
|
e.Graphics.DrawLine(gridLinePen, left + width1, top + height / 2, left + width1, top + height);
|
}
|
SizeF sf = e.Graphics.MeasureString(item.Text, e.CellStyle.Font);
|
float lstr = (width - sf.Width) / 2;
|
float rstr = (height / 2 - sf.Height) / 2;
|
//画出文本框
|
if (item.Text != "")
|
{
|
e.Graphics.DrawString(item.Text, e.CellStyle.Font,
|
new SolidBrush(e.CellStyle.ForeColor),
|
left + lstr,
|
top + rstr,
|
StringFormat.GenericDefault);
|
}
|
width = 0;
|
width1 = 0;
|
for (int i = item.Index; i < item.Span + item.Index; i++)
|
{
|
string columnValue = dgv.Columns[i].HeaderText;
|
width1 = dgv.Columns[i].Width;
|
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 + width + lstr,
|
top + height / 2 + rstr,
|
StringFormat.GenericDefault);
|
}
|
width += dgv.Columns[i].Width;
|
}
|
}
|
e.Handled = true;
|
}
|
}
|
#endregion
|
}
|
private List<TopHeader> _headers = new List<TopHeader>();
|
public List<TopHeader> Headers
|
{
|
get { return _headers; }
|
}
|
|
public struct TopHeader
|
{
|
public TopHeader(int index, int span, string text)
|
{
|
this.Index = index;
|
this.Span = span;
|
this.Text = text;
|
}
|
public int Index;
|
public int Span;
|
public string Text;
|
}
|
}
|
}
|