web-dev-qa-db-ja.com

セルが結合されたGridView

一部の列の結合された行でグリッドビューにデータを表示する必要があります。以下に定義されたフォーマットでグリッドビューを準備するのを手伝ってください: enter image description here

また、データベースからの元のデータは以下の形式です。 enter image description here

このタスクを動的かつ効率的に行うための最良の方法を見つけるのを手伝ってください。

16
himanshu

RowSpanを使用する必要があります。

次のコードを参照してください:

protected void GridView1_DataBound1(object sender, EventArgs e)
{
  for (int rowIndex = GridView1.Rows.Count - 2;
                                     rowIndex >= 0; rowIndex--)
  {
    GridViewRow gvRow = GridView1.Rows[rowIndex];
    GridViewRow gvPreviousRow = GridView1.Rows[rowIndex + 1];
    for (int cellCount = 0; cellCount < gvRow.Cells.Count;
                                                  cellCount++)
    {
     if (gvRow.Cells[cellCount].Text ==
                            gvPreviousRow.Cells[cellCount].Text)
     {
       if (gvPreviousRow.Cells[cellCount].RowSpan < 2)
       {
         gvRow.Cells[cellCount].RowSpan = 2;
       }
       else
       {
        gvRow.Cells[cellCount].RowSpan =
            gvPreviousRow.Cells[cellCount].RowSpan + 1;
       }
       gvPreviousRow.Cells[cellCount].Visible = false;
    }
   }
}

参照:

https://sites.google.com/site/learning6329/asp-net/gridview-merge-cells

問題の絵の例:

http://marss.co.ua/MergingCellsInGridView.aspx

19
Freelancer

最初の列の行セルをマージする最も簡単な方法は次のとおりです。 Forループは常に逆に繰り返されることに注意してください。

protected void GridView1_DataBound(object sender, EventArgs e)
    {
        int RowSpan = 2;
        for (int i = GridView1.Rows.Count-2; i >=0 ;i-- )
        {
            GridViewRow currRow = GridView1.Rows[i];
            GridViewRow prevRow = GridView1.Rows[i+1];
            if (currRow.Cells[0].Text == prevRow.Cells[0].Text)
            {
                currRow.Cells[0].RowSpan = RowSpan;
                prevRow.Cells[0].Visible = false;
                RowSpan += 1;
            }
            else
                RowSpan = 2;
        }
    }

すべての列の行セルを同様にマージする場合は、上記の外側のforloop内で別の「forloop」を使用できます

1
Shridhar Gowda