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~~)

  • 相关阅读:
    c++ -- c风格字符串,以及c++通过c_str()方法与c风格字符串的转换
    python--sklearn,聚类结果可视化工具TSNE
    ml--分类与预测算法评价方法
    python--pandas学习,依赖库xlrd和xlwt
    python--源码位置查找
    mysql中的group by,having,order by,where用法
    mysql外连接的总结
    mysql数据库中多表关联查询的实例
    理解mysql数据库的事务特征,事务隔离级别,加锁机制
    理解springMVC的controller
  • 原文地址:https://www.cnblogs.com/wyynts/p/6514977.html
Copyright © 2011-2022 走看看