none
GRIDVIEWの同一列内のセルを結合するには RRS feed

すべての返信

  • GridViewは行の単位でHTMLを生成しますから、行を超えて列を結合させるのはまず無理なんじゃないでしょうか。
    2006年7月26日 8:14
  • とりあえず、簡単なテストコードを書いてみました。4列目が同じ値の場合は、rowspanで結合させています。
    protected void GridView1_PreRender(object sender, EventArgs e) { GridViewRow gvr_sav = null; string value_wk = string.Empty; string value_sav = string.Empty; int rowSpanCnt = 0; foreach (GridViewRow gvr in GridView1.Rows) { value_wk = gvr.Cells[3].Text; if (gvr.Cells[3].Text == value_sav) { gvr.Cells.RemoveAt(3); rowSpanCnt++; } else { if (gvr_sav != null) { gvr_sav.Cells[3].RowSpan = rowSpanCnt + 1; } gvr_sav = gvr; rowSpanCnt = 0; } value_sav = value_wk; } if (rowSpanCnt > 0) { if (gvr_sav != null) { gvr_sav.Cells[3].RowSpan = rowSpanCnt + 1; } } }
    2006年7月27日 3:01
    モデレータ
  • ありがとうございます。大変参考になりました。

    なお、「DataGridコントロールの同一列内のセルを結合するには」www.atmarkit.co.jp/fdotnet/dotnettips/092joincells/joincells.htmlを参考に次のようにしたところセルの結合ができました。

     Sub joinCells(ByVal gv As GridView, ByVal column As Integer)
          
            Dim numRow As Integer = gv.Rows.Count
            Dim B As Integer = 0
            Dim N As Integer = 0
           
            Dim baseCell As TableCell = New TableCell
            Dim nextCell As TableCell = New TableCell
            '***************************************************      
            While B < numRow - 1
               
                N = B + 1
                baseCell = gv.Rows(B).Cells(column)

                While N < numRow
                   
                    nextCell = gv.Rows(N).Cells(column)
                    If baseCell.Text = nextCell.Text Then
                        If baseCell.RowSpan = 0 Then
                            baseCell.RowSpan = 2
                        Else
                            baseCell.RowSpan = baseCell.RowSpan + 1
                        End If
                        gv.Rows(N).Cells.Remove(nextCell)
                        N = N + 1
                    Else
                        Exit While
                    End If
                End While
               
                B = N
                '***
            End While

        End Sub

    ただ、Bound列はOKですが、Template列はCellの値が読み込めていません。

     

    2006年7月27日 3:33
  • > ただ、Bound列はOKですが、Template列はCellの値が読み込めていません。

    Templateの場合はCellの中にラベルやその他の貼り付けたコントロールが存在しますから、そのコントロールを指定して値を取り出す必要があると思います。

    2006年7月27日 4:00
  • その通りですが、その方法が今ひとつわからないので困っています。

     

    2006年7月27日 8:40