1

我创建了一个自定义GridView(实际上是 a RadGrid),它大致执行以下操作。

  1. 初始化 GridView 格式
  2. 设置列(取决于要显示的数据类型)
  3. 填充行

实例化 thisGridView并将其添加到我的页面时,我希望第一列在第一行重复但相似的数据上包含“rowspan”属性。“rowspan”值应该等于它后面的相似行数。通过这种方式,我希望使最终视图更清晰。

我认为,这个逻辑应该在填充行时发生。最初我将行添加到 aDataTable然后将其绑定到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按第一列排序的 a 中,所以我想它实际上必须先排序,然后以某种方式计算每个“like”第一列的行数,然后设置“rowspan”值该列的第一行等于属于它的行数。

这有意义吗?这是我想在布局中完成的理想示例:

在此处输入图像描述

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 回答