DataGridView 合并同一列中值相同的相邻单元格 合并单元格

来源:互联网 发布:剑三小和尚的数据 编辑:程序博客网 时间:2024/06/10 12:21
/// <summary>        /// 合并同一列中值相同的相邻单元格        /// </summary>        /// <param name="dgv">DataGridView</param>        /// <param name="columnIndexList">要合并的列的索引列表</param>        /// <param name="e">当前单元格的属性访问器</param>        private void MergeCellInOneColumn(DataGridView dgv, List<int> columnIndexList, DataGridViewCellPaintingEventArgs e)        {            if (columnIndexList.Contains(e.ColumnIndex) && e.RowIndex != -1)            {                Brush gridBrush = new SolidBrush(dgv.GridColor);                Brush backBrush = new SolidBrush(e.CellStyle.BackColor);                Pen gridLinePen = new Pen(gridBrush);                //擦除                e.Graphics.FillRectangle(backBrush, e.CellBounds);                //画右边线                e.Graphics.DrawLine(gridLinePen,                   e.CellBounds.Right - 1,                   e.CellBounds.Top,                   e.CellBounds.Right - 1,                   e.CellBounds.Bottom - 1);                //画底边线                if ((e.RowIndex < dgv.Rows.Count - 1 && dgv.Rows[e.RowIndex + 1].Cells[e.ColumnIndex].Value.ToString() != e.Value.ToString()) ||                    e.RowIndex == dgv.Rows.Count - 1)                {                    e.Graphics.DrawLine(gridLinePen,                        e.CellBounds.Left,                        e.CellBounds.Bottom - 1,                        e.CellBounds.Right - 1,                        e.CellBounds.Bottom - 1);                }                //写文本                if (e.RowIndex == 0 || dgv.Rows[e.RowIndex - 1].Cells[e.ColumnIndex].Value.ToString() != e.Value.ToString())                {                    e.Graphics.DrawString((String)e.Value, e.CellStyle.Font,                        Brushes.Black, e.CellBounds.X + 2,                        e.CellBounds.Y + 5, StringFormat.GenericDefault);                }                e.Handled = true;            }        }


在写文本的位置(string)e.value 时会报错误,改写为e.value.tostring()才通过了。

接下来是写调用

 private void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)        {            List<int> indexs = new List<int>() { 0, 1 };            MergeCellInOneColumn(dataGridView1, indexs, e);        }

本文摘自:http://www.cnblogs.com/bloodofhero/archive/2012/07/05/2578068.html