c#中C#datagridview 合并数据相同的行
private void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{
//e.ColumnIndex == 1 || e.ColumnIndex == 2 || e.ColumnIndex == 3(最后一列不绘制)
if (e.RowIndex >= 0 && (e.ColumnIndex == 1 || e.ColumnIndex == 2 || e.ColumnIndex == 3 ) && e.Value.ToString() != string.Empty)
{
#region
int UpRows = 0;//上面相同的行数
int DownRows = 0;//下面相同的行数
int count = 0;//总行数
int cellwidth = e.CellBounds.Width;//列宽
for (int i = e.RowIndex; i < this.dataGridView1.Rows.Count; i++) //获取下面的行数
{
if (this.dataGridView1.Rows[i].Cells[e.ColumnIndex].Value.ToString().Equals(e.Value.ToString()))
{
DownRows++;
}
else
{
break;
}
}
for (int i = e.RowIndex; i >= 0; i--) //获取上面的行数
{
if (this.dataGridView1.Rows[i].Cells[e.ColumnIndex].Value.ToString().Equals(e.Value.ToString()))
{
UpRows++;
}
else
{
break;
}
}
count = UpRows + DownRows - 1;//总行数
using (Brush gridBrush = new SolidBrush(this.dataGridView1.GridColor), backColorBrush = new SolidBrush(e.CellStyle.BackColor))
{
using (Pen gridLinePen = new Pen(gridBrush))
{
e.Graphics.FillRectangle(backColorBrush, e.CellBounds); //清除单元格
if (e.Value != null)
{
int cellheight = e.CellBounds.Height;
SizeF size = e.Graphics.MeasureString(e.Value.ToString(), e.CellStyle.Font);
e.Graphics.DrawString((e.Value).ToString(), e.CellStyle.Font, Brushes.Black, e.CellBounds.X + (cellwidth - size.Width) / 2, e.CellBounds.Y - cellheight * (UpRows - 1) + (cellheight * count - size.Height) / 2, StringFormat.GenericDefault);
}
//如果下一行数据不等于当前行数据,则画当前单元格底边线
if (e.RowIndex < this.dataGridView1.Rows.Count - 1 && this.dataGridView1.Rows[e.RowIndex + 1].Cells[e.ColumnIndex].Value.ToString() != e.Value.ToString())
{
e.Graphics.DrawLine(gridLinePen, e.CellBounds.Left, e.CellBounds.Bottom