問題:
在 DataGridView 中合併儲存格以實現整合的資料顯示,無需使用重複行。目標是將具有跨行重複標題值的網格轉換為一個網格,其中標題值跨越表示重複行的合併單元格。
解:
這可以透過結合自訂單元格格式和繪畫事件處理來實現。
找出重複儲存格值:
首先,定義一個方法來決定目前儲存格的值是否與其上方的儲存格相同:
<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>
自訂單元格繪製:
在 DataGridView 的儲存格繪製事件中,刪除具有重複值的儲存格的邊框:
<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>
自訂儲存格格式:
在儲存格格式事件中,隱藏重複行的值:
<code class="language-csharp">if (e.RowIndex == 0) return; if (IsTheSameCellValue(e.ColumnIndex, e.RowIndex)) { e.Value = ""; e.FormattingApplied = true; }</code>
其他設定:
停用列的自動生成,以防止建立不需要的列:
<code class="language-csharp">dataGridView1.AutoGenerateColumns = false;</code>
結果:
透過實現上述步驟,DataGridView 將顯示具有合併單元格的數據,消除重複的標題值並呈現整合的視圖。
以上是如何在 WinForms 中合併 DataGridView 儲存格以合併具有重複標題值的資料?的詳細內容。更多資訊請關注PHP中文網其他相關文章!