Windows Forms DataGridView 中合併儲存格
來源:互聯網
上載者:User
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; } } }