DataGridView 中合並單元格


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

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

                         //  畫 Grid 邊線(僅畫單元格的底邊線和右邊線)
                        
//    如果下一行和當前行的數據不同,則在當前的單元格畫一條底邊線
                         if (e.RowIndex < dataGridView1.Rows.Count -  1 &&
                        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);
                         //  畫右邊線
                        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 &&
                            dataGridView1.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;這一句非常重要,必須加上,要不所畫的內容就被后面的Painting事件刷新不見了!!!
                        e.Handled =  true;
                    }
                }
            }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM