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)
                {
                    //if (!string.IsNullOrEmpty(this.dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString()) && this.dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value != null)
                    //{
                    #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;//总行数
                    //if (count < 2)
                    //{ return; }
                    using (Brush gridBrush = new SolidBrush(this.dataGridView1.GridColor), backColorBrush = new SolidBrush(e.CellStyle.BackColor))
                    {
                        using (Pen gridLinePen = new Pen(gridBrush))
                        {
                            //this.dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = this.dataGridView1.Rows[e.RowIndex - 1].Cells[e.ColumnIndex].Value;
                            //this.dataGridView1.Rows[e.RowIndex - 1].Cells[e.ColumnIndex].Value = DBNull.Value;
                            //清除单元格
                            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);
                                //if (e.RowIndex > 0 && this.dataGridView1.Rows[e.RowIndex - 1].Cells[e.ColumnIndex].Value.ToString() == e.Value.ToString())
                                //{
    
                                //}
                                //else
                                //{
                                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.Left, e.CellBounds.Bottom - 1, e.CellBounds.Right - 1, e.CellBounds.Bottom - 1);
                            e.Graphics.DrawLine(gridLinePen, e.CellBounds.Right - 1, e.CellBounds.Top, e.CellBounds.Right - 1, e.CellBounds.Bottom);
                            e.Handled = true;
                        }
                    }
                    #endregion
    
    
                    //}
                }
            }

    最近整理自己写过的代码,发现datagridview行合并代码,已忘记是摘抄的网上的资料还是自己写的了,故此处无法写明参考自何处,如有哪位网友发现来源,麻烦请告知。在下还是很支持正版的。(整理进自己的博客里,方便查看阅读。O(∩_∩)O~~)

  • 相关阅读:
    css样式预处理器
    cookie&localStorage&sessionStorage
    《程序员面试金典》---读书笔记
    《Linux多线程服务端编程--使用muduo C++ 网络库》---读书笔记
    慢慢走上正轨
    padding 和 margin 不为人知的一面 ---(深度整理)
    html+css代码需要注意的地方(整理)
    前言
    MikTex 和 TexStudio 输入中文日文
    .htaccess 二级域名绑定子目录
  • 原文地址:https://www.cnblogs.com/wyynts/p/6514977.html
Copyright © 2011-2022 走看看