zoukankan      html  css  js  c++  java
  • C# DataGridView 合并相同的行

    private void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
    {
    if (e.RowIndex >= 0 && e.ColumnIndex >= 0 && 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 - 1, e.CellBounds.Right - 1, e.CellBounds.Bottom - 1);
    }
    if (e.RowIndex == this.dataGridView1.Rows.Count - 1)
    {
    e.Graphics.DrawLine(gridLinePen, e.CellBounds.Left + 2, e.CellBounds.Bottom - 1, e.CellBounds.Right - 1, e.CellBounds.Bottom - 1);
    count = 0;
    }
    //画grid右边线
    e.Graphics.DrawLine(gridLinePen, e.CellBounds.Right - 1, e.CellBounds.Top, e.CellBounds.Right - 1, e.CellBounds.Bottom);
    e.Handled = true;
    }
    }
    #endregion
    }
    }

  • 相关阅读:
    Python单例模式中的4种方式
    Python list,tuple,dict,set高级变量常用方法
    python如何获取多个excel单元格的值
    两种方法实现python操作日志的封装
    numpy中函数shape的用法
    python中timer定时器常用的两种实现方法
    详解Python中argpasrse模块的基本使用
    在python中列表删除和多重循环退出
    Python的驻留机制(仅对数字,字母,下划线有效)
    python实现tail -f 功能
  • 原文地址:https://www.cnblogs.com/Elcser/p/13347116.html
Copyright © 2011-2022 走看看