2012年10月11日木曜日

[ASP.NET]データグリッドビューのセルを結合風。



データグリッドビューでセルを縦に結合したい場合。

[joinCells]等で結合関数をネットで拾って来ればOKではないかと。
が、結合してしまうと、再読込の時等、
サーバサイドがズレてしまったセルから値をとってこようとしたりして
どうにも都合が悪い。
で、いつも結局、結合でなくて、他のセルを空白&線を消す処理にしている。

↓以下、そのバージョン。データバインドした後に。


'★使い方
'1つ目の引数は結合風にする列。2つ目の引数は比較に使用する列。
'-------------------------------

Me.joinCells(Me.dgrid, 3, 0)  '3列目を結合風。判断は0列目の値を基準とする。
Me.joinCells(Me.dgrid, 2, 0)  '2列目を結合風。判断は0列目の値を基準とする。
Me.joinCells(Me.dgrid, 1, 0)   '1列目を結合風。判断は0列目の値を基準とする。
'-------------------------------

'結合風関数。
#Region "joinCells"
    Public Sub joinCells(ByVal dg As GridView, ByVal column As Integer, _ 
                                               ByVal HikakuColumn As Integer)

        Dim numRow As Integer = dg.Rows.Count
        Dim baseIndex As Integer = 0
        Dim nextindex As Integer
        Dim baseCell As TableCell
        Dim nextCell As TableCell

        Do While (baseIndex < numRow)

            nextindex = baseIndex + 1
            baseCell = dg.Rows(baseIndex).Cells(column)

            Do While (nextindex < numRow)

                nextCell = dg.Rows(nextindex).Cells(column)

                If (getText(dg.Rows(nextindex).Cells(HikakuColumn)) = getText(dg.Rows(baseIndex).Cells(HikakuColumn))) Then
                    nextindex = nextindex + 1
                    nextCell.Text = ""
                    nextCell.Style.Item("border-top-color") = "white"
                Else
                    Exit Do
                End If
            Loop
            baseIndex = nextindex
        Loop
    End Sub
#End Region
#Region "getText"
    Public Function getText(ByVal tc As TableCell) As String
        Dim dblc As DataBoundLiteralControl
        dblc = tc.Controls(0)
        Return dblc.Text
    End Function
#End Region

0 件のコメント:

コメントを投稿