1

おおよそ次のことを行うカスタムGridView(実際には) を作成しました。RadGrid

  1. GridView の書式設定を初期化する
  2. 列の設定 (表示するデータの種類に応じて)
  3. 行に入力する

this をインスタンスGridView化してページに追加するとき、最初の列には、繰り返されるが同様のデータの最初の行に「rowspan」属性が含まれるようにします。「rowspan」の値は、それに続く同様の行の数と等しくなければなりません。このようにして、最終的なビューをよりきれいにしたいと考えています。

これのロジックは、行にデータを入力するときに実行する必要があると思います。最初に行を a に追加し、最終ステップとしてDataTableそれを にバインドします。GridView

これが私が試みていた一般的なロジックですが、うまくいきませんでした。私は何を間違っていますか?

Dim dt As New DataTable() 'Has three default columns
For Each d In Documents 'MAIN ITEM (First Column Data)
    Dim rowspan As Integer
    rowspan = 0
    For Each f In Files
        If rowspan = 0 Then
            Me.dt.Rows.Add(New Object() {d.Title, f.Language, f.FileSize})
            'THIS DOESN'T WORK!
            Me.dt.Columns(0).ExtendedProperties.Item("rowspan") = rowspan.ToString()
        Else
            Me.dt.Rows.Add(New Object() {Nothing, f.Language, f.FileSize})
        End If
        rowspan += 1
    Next
Next

DataViewまた、これは最初の列でソートされたにダンプされることに注意してください。したがって、最初に実際にソートする必要があると思いますその列の最初の行は、それに属する行の数と同じです。

これは理にかなっていますか?レイアウトで達成したいことの理想的な例を次に示します。

ここに画像の説明を入力

4

1 に答える 1

3

これを試して。

Protected Sub DemoGrid_PreRender(sender As Object, e As System.EventArgs) Handles DemoGrid.PreRender
    MergeRowsWithSameContent(sender)
End Sub

Public Sub MergeRowsWithSameContent(gvw As GridView)
    For rowIndex As Integer = gvw.Rows.Count - 2 To 0 Step -1
        Dim row As GridViewRow = gvw.Rows(rowIndex)
        Dim previousRow As GridViewRow = gvw.Rows(rowIndex + 1)

        For i As Integer = 0 To row.Cells.Count - 1
            If row.Cells(i).Text = previousRow.Cells(i).Text Then
                row.Cells(i).RowSpan = If(previousRow.Cells(i).RowSpan < 2, 2, previousRow.Cells(i).RowSpan + 1)
                previousRow.Cells(i).Visible = False
            End If
        Next
    Next
End Sub

PS:私が何年も使っているこの素晴らしいコードの恥知らずな移植。

于 2012-11-01T15:18:44.333 に答える