• 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;
                }

            }

  • 相关阅读:
    [linux] 将socket设置为非阻塞(nonblocking)
    翻译—IvorHorton的Begining Visual C++ 2005 [第一章]
    深入解析ATL(第二版ATL8.0)(1.11.3节)
    gdb使用初步
    编程其实就是一个不断做出选择的过程
    windows和linux下多线程的一些区别
    makefile编写入门
    深入解析ATL(第二版ATL8.0)(1.41.7节)
    深入解析ATL(第二版ATL8.0)(1.81.10节)
    用gdb调试子进程
  • 原文地址:https://www.cnblogs.com/wuhuisheng/p/2111701.html
Copyright © 2020-2023  润新知