zoukankan      html  css  js  c++  java
  • winform的DataGridView合并单元格

            private void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
            {
                Brush gridBrush = new SolidBrush(this.dataGridView1.GridColor);
                SolidBrush backBrush = new SolidBrush(e.CellStyle.BackColor);
                SolidBrush fontBrush = new SolidBrush(e.CellStyle.ForeColor);
                int cellheight;
                int fontheight;
                int cellwidth;
                int fontwidth;
                int countU = 0;
                int countD = 0;
                int count = 0;
                // 对第1列相同单元格进行合并
                if (e.ColumnIndex == 0 && e.RowIndex != -1)
                {
                    cellheight = e.CellBounds.Height;
                    fontheight = (int)e.Graphics.MeasureString(e.Value.ToString(), e.CellStyle.Font).Height;
                    cellwidth = e.CellBounds.Width;
                    fontwidth = (int)e.Graphics.MeasureString(e.Value.ToString(), e.CellStyle.Font).Width;
                    Pen gridLinePen = new Pen(gridBrush);
                    string curValue = e.Value == null ? "" : e.Value.ToString().Trim();
                    string curSelected = this.dataGridView1.Rows[e.RowIndex].Cells[0].Value == null ? ""
                        : this.dataGridView1.Rows[e.RowIndex].Cells[0].Value.ToString().Trim();
                    if (!string.IsNullOrEmpty(curValue))
                    {
                        for (int i = e.RowIndex; i < this.dataGridView1.Rows.Count; i++)
                        {
                            if (this.dataGridView1.Rows[i].Cells[0].Value.ToString().Equals(curValue))
                            {
                                this.dataGridView1.Rows[i].Cells[0].Selected = this.dataGridView1.Rows[e.RowIndex].Selected;

                                this.dataGridView1.Rows[i].Selected = this.dataGridView1.Rows[e.RowIndex].Selected;

                                countD++;

                            }

                            else
                            {
                                break;
                            }
                        }
                        for (int i = e.RowIndex; i >= 0; i--)
                        {
                            if (this.dataGridView1.Rows[i].Cells[0].Value.ToString().Equals(curValue))
                            {
                                this.dataGridView1.Rows[i].Cells[0].Selected = this.dataGridView1.Rows[e.RowIndex].Selected;

                                this.dataGridView1.Rows[i].Selected = this.dataGridView1.Rows[e.RowIndex].Selected;

                                countU++;
                            }
                            else
                            {
                                break;
                            }
                        }

                        count = countD + countU - 1;
                        if (count < 2) { return; }
                    }

                    if (this.dataGridView1.Rows[e.RowIndex].Selected)
                    {
                        backBrush.Color = e.CellStyle.SelectionBackColor;
                        fontBrush.Color = e.CellStyle.SelectionForeColor;
                    }

                    e.Graphics.FillRectangle(backBrush, e.CellBounds);
                    e.Graphics.DrawString((String)e.Value, e.CellStyle.Font, fontBrush, e.CellBounds.X + (cellwidth - fontwidth) / 2, e.CellBounds.Y - cellheight * (countU - 1) + (cellheight * count - fontheight) / 2);

                    if (countD == 1)
                    {
                        e.Graphics.DrawLine(gridLinePen, e.CellBounds.Left, e.CellBounds.Bottom - 1, e.CellBounds.Right - 1, e.CellBounds.Bottom - 1);
                        count = 0;
                    }

                    // 画右边线
                    e.Graphics.DrawLine(gridLinePen, e.CellBounds.Right - 1, e.CellBounds.Top, e.CellBounds.Right - 1, e.CellBounds.Bottom);

                    e.Handled = true;
                }

            }

  • 相关阅读:
    【分治法】线性时间选择(转)
    【分治法】最接近点对问题(转)
    概率DP入门总结 16题(转)
    动态规划初探及什么是无后效性? (转)
    第15章DP(转)
    整数快速乘法/快速幂+矩阵快速幂+Strassen算法 (转)
    矩阵乘法的理解(转)
    算法导论第4章习题与思考题(转)
    Transaction Script模式
    注册服务
  • 原文地址:https://www.cnblogs.com/wuhuisheng/p/2111701.html
Copyright © 2011-2022 走看看