首頁 >後端開發 >C++ >如何合併 WinForms DataGridView 第一列中的重複儲存格?

如何合併 WinForms DataGridView 第一列中的重複儲存格?

Mary-Kate Olsen
Mary-Kate Olsen原創
2025-01-12 15:21:47329瀏覽

How to Merge Duplicate Cells in a WinForms DataGridView's First Column?

WinForms DataGridView儲存格合併

問題:

在DataGridView中,資料以網格形式排列,包含行和列。每一行和列的交叉點都由一個儲存格表示。在本例中,資料顯示的格式中,第一列(Hd1)中的重複值未合併,導致相同值出現多行。

需求:

目標是合併第一列(Hd1)中具有重複值的單元格,以改善視覺效果並有效率地整合資料。

解:

要合併DataGridView中的儲存格,您可以依照下列步驟操作:

  1. 找出重複值:

    • 建立一個名為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>
  1. 單元格繪製:

    • 重寫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>
  1. 單元格格式化:

    • 重寫CellFormatting事件處理程序,如果儲存格是重複的,則將其值設為空字串:
<code class="language-csharp">if (e.RowIndex == 0)
    return;
if (IsTheSameCellValue(e.ColumnIndex, e.RowIndex))
{
    e.Value = "";
    e.FormattingApplied = true;
}</code>
  1. 其他設定:

    • 在表單載入事件中將dataGridView1.AutoGenerateColumns設定為false,以防止自動產生欄位。
<code class="language-csharp">dataGridView1.AutoGenerateColumns = false;</code>

結果:

執行這些步驟將合併DataGridView第一列中具有重複值的儲存格,從而使資料顯示更緊湊且更有條理。

以上是如何合併 WinForms DataGridView 第一列中的重複儲存格?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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