23

現在、次のように表示されているグリッドにいくつかのデータがあります。

------------------
|Hd1| Value  |
------------------
|A  | A1     |
------------------
|A  | A2     |
------------------
|A  | A3     |
------------------
|A  | A4     |
------------------
|B  | B1     |
------------------
|B  | B2     |
------------------
|B  | B3     |
------------------
|B  | B4     |
------------------
|B  | B5     |
------------------
|C  | C1     |
------------------
|C  | C2     |
------------------

私はそれを次のようにしたい:

|Hd | Value  |
------------------
|A  | A1     |
    ----------
|   | A2     |
    ----------
|   | A3     |
    ----------
|   | A4     |
------------------
|B  | B1     |
    ----------
|   | B2     |
    ----------
|   | B3     |
    ----------
|   | B4     |
    ----------
|   | B5     |
------------------
|C  | C1     |
    ----------
|   | C2     |
------------------

これらのセルを結合する方法はありますか? 私は多くの方法でグーグルも試しましたが、適切な方法が見つかりませんでした. datagridview を使用せずにこのデータを別の方法で表示することが可能であるが、結果が私が示した方法である場合、それも私の問題を解決します。

4

4 に答える 4

42

最初に重複する値を見つける必要があります

2 つの方法が必要です。

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();
}

イベントでは、セルペインティング:

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;
    }  
}

セルの書式設定:

if (e.RowIndex == 0)
    return;
if (IsTheSameCellValue(e.ColumnIndex, e.RowIndex))
{
    e.Value = "";
    e.FormattingApplied = true;
}

そしてform_loadで:

dataGridView1.AutoGenerateColumns = false;

DGV_Merge のイメージ

于 2015-05-08T07:28:54.257 に答える