ExDataGridView 群组扩展 ...
DataGridView是非常强大的控件,当然有时他也不能满足我们现有的需求,当然我门就要对他进行扩展。 此控件我会逐步的扩展功能.
先上图咱们来看看效果,当然处理方式不是最佳的忘提供建议,此群组样式为DevGridView样式。


解决方案,首先通过 public void BindingDataSource(DataTable dataTable, string group) 绑定数据员并设置群组合并列
分析数据群组信息,并将数据群组信息记录,通过群组数据重绘,将数据绑定控件。
放上重绘代码:
protected override void OnRowPostPaint(DataGridViewRowPostPaintEventArgs e)
{
base.OnRowPostPaint(e);
int rowIndex = 0;
bool flag = false;
string group = string.Empty;
bool _curflag = false;
foreach (GroupRows gr in this.GroupRowsColloce)
{
group = gr.GroupName;
_curflag = gr.IsAllExpland;
if (e.RowIndex == gr.GroupIndex)
{
flag = true;
break;
}
if (e.RowIndex >= gr.GroupIndex)
{
rowIndex++;
}
}
if (!flag)
{
Rectangle rectangle = new Rectangle(e.RowBounds.Location.X,
e.RowBounds.Location.Y,
RowHeadersWidth - 4,
e.RowBounds.Height);
TextRenderer.DrawText(e.Graphics,
(e.RowIndex + 1 - rowIndex).ToString(),
RowHeadersDefaultCellStyle.Font,
rectangle,
Color.Black,
TextFormatFlags.VerticalCenter | TextFormatFlags.HorizontalCenter);
}
else
{
e.Graphics.FillRectangle(new SolidBrush(Color.FromArgb(206, 206, 206)), new Rectangle(e.RowBounds.X, e.RowBounds.Y, e.RowBounds.Width, this.Height + 2));
e.Graphics.DrawRectangle(new Pen(new SolidBrush(Color.FromArgb(220, 220, 220))), new Rectangle(e.RowBounds.X, e.RowBounds.Y, e.RowBounds.Width, this.Height + 2));
if (_curflag)
{
e.Graphics.DrawImage(Properties.Resources.sub,
new Rectangle(e.RowBounds.X, e.RowBounds.Y + (e.RowBounds.Height - Properties.Resources.add.Width) / 2,
Properties.Resources.add.Width,
Properties.Resources.add.Height));
}
else
{
e.Graphics.DrawImage(Properties.Resources.add,
new Rectangle(e.RowBounds.X, e.RowBounds.Y + (e.RowBounds.Height - Properties.Resources.add.Width) / 2,
Properties.Resources.add.Width,
Properties.Resources.add.Height));
}
StringFormat stringFormat = new StringFormat();
stringFormat.LineAlignment = StringAlignment.Center;
e.Graphics.DrawString(group,
new Font("宋体", 9),
new SolidBrush(Color.Black),
new Rectangle(e.RowBounds.X + Properties.Resources.add.Width + 2,
e.RowBounds.Y + 2,
e.RowBounds.Width,
e.RowBounds.Height),
stringFormat);
}
}
控件的扩展都会提供给我门重构方法。我们只要通过重构|重绘都会得到我们想要的结果。

浙公网安备 33010602011771号