質問:
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 中国語 Web サイトの他の関連記事を参照してください。