C#WinForm開發之DataGridView 中合併單元格

DataGridView 沒有提供合併單元格的功能,要實現合併單元格的功能就要在CellPainting事件中使用Graphics.DrawLine和 Graphics.DrawString 自己來“畫”。

下面的代碼可以對DataGridView第1列內容相同的單元格進行合併:
        private void dgv_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
        {
            // 對第1列相同單元格進行合併
            if (e.ColumnIndex == 0 && e.RowIndex != -1)
            {
                using
                    (
                    Brush gridBrush = new SolidBrush(this.dgv.GridColor),
                    backColorBrush = new SolidBrush(e.CellStyle.BackColor)
                    )
                {
                    using (Pen gridLinePen = new Pen(gridBrush))
                    {
                        // 清除單元格
                        e.Graphics.FillRectangle(backColorBrush, e.CellBounds);

                        // 畫 Grid 邊線(僅畫單元格的底邊線和右邊線)
                        //   如果下一行和當前行的數據不同,則在當前的單元格畫一條底邊線
                        if (e.RowIndex < dgv.Rows.Count - 1 &&
                        dgv.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);
                        // 畫右邊線
                        e.Graphics.DrawLine(gridLinePen, e.CellBounds.Right - 1,
                            e.CellBounds.Top, e.CellBounds.Right - 1,
                            e.CellBounds.Bottom);

                        // 畫(填寫)單元格內容,相同的內容的單元格只填寫第一個
                        if (e.Value != null)
                        {
                            if (e.RowIndex > 0 &&dgv.Rows[e.RowIndex - 1].Cells[e.ColumnIndex].Value.ToString() == e.Value.ToString())
                            { }
                            else
                            {
                                e.Graphics.DrawString((String)e.Value, e.CellStyle.Font,
                                    Brushes.Black, e.CellBounds.X + 2,
                                    e.CellBounds.Y + 5, StringFormat.GenericDefault);
                            }
                        }
                        e.Handled = true;
                    }
                }
            }

轉自http://www.cnblogs.com/yuanermen/archive/2007/03/29/692683.aspx

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章