首頁 >後端開發 >C++ >如何在 WinForms 中合併 DataGridView 儲存格以合併具有重複標題值的資料?

如何在 WinForms 中合併 DataGridView 儲存格以合併具有重複標題值的資料?

Susan Sarandon
Susan Sarandon原創
2025-01-12 15:20:44254瀏覽

How to Merge DataGridView Cells in WinForms to Consolidate Data with Duplicate Header Values?

WinForms 中的儲存格合併

問題:

在 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn