WinForms DataGridView儲存格合併
問題:
在DataGridView中,資料以網格形式排列,包含行和列。每一行和列的交叉點都由一個儲存格表示。在本例中,資料顯示的格式中,第一列(Hd1)中的重複值未合併,導致相同值出現多行。
需求:
目標是合併第一列(Hd1)中具有重複值的單元格,以改善視覺效果並有效率地整合資料。
解:
要合併DataGridView中的儲存格,您可以依照下列步驟操作:
找出重複值:
IsTheSameCellValue
的方法,比較第一列中兩個相鄰單元格的值。如果值相同,則傳回true
,否則回傳false
。 <code class="language-csharp">bool IsTheSameCellValue(int column, int row) { DataGridViewCell cell1 = dataGridView1[column, row]; DataGridViewCell cell2 = dataGridView1[column, row - 1]; if (cell1.Value == null || cell2.Value == null) { return false; } return cell1.Value.ToString() == cell2.Value.ToString(); }</code>
單元格繪製:
CellPainting
事件處理程序並修改儲存格的AdvancedBorderStyle
屬性:<code class="language-csharp">private void dataGridView1_CellPainting(object sender, DataGridViewCellPaintingEventArgs e) { e.AdvancedBorderStyle.Bottom = DataGridViewAdvancedCellBorderStyle.None; if (e.RowIndex < 1 || e.ColumnIndex < 0) return; if (IsTheSameCellValue(e.ColumnIndex, e.RowIndex)) { e.AdvancedBorderStyle.Top = DataGridViewAdvancedCellBorderStyle.None; } else { e.AdvancedBorderStyle.Top = dataGridView1.AdvancedCellBorderStyle.Top; } }</code>
單元格格式化:
CellFormatting
事件處理程序,如果儲存格是重複的,則將其值設為空字串:<code class="language-csharp">if (e.RowIndex == 0) return; if (IsTheSameCellValue(e.ColumnIndex, e.RowIndex)) { e.Value = ""; e.FormattingApplied = true; }</code>
其他設定:
dataGridView1.AutoGenerateColumns
設定為false
,以防止自動產生欄位。 <code class="language-csharp">dataGridView1.AutoGenerateColumns = false;</code>
結果:
執行這些步驟將合併DataGridView第一列中具有重複值的儲存格,從而使資料顯示更緊湊且更有條理。
以上是如何合併 WinForms DataGridView 第一列中的重複儲存格?的詳細內容。更多資訊請關注PHP中文網其他相關文章!