【问题标题】:How to Implement Rowspan in a GridView (for .NET 3.5)如何在 GridView 中实现 Rowspan(适用于 .NET 3.5)
【发布时间】:2012-06-23 04:36:34
【问题描述】:

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

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

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

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

这有意义吗?这是我想在布局中完成的ideal example

【问题讨论】:

    标签: vb.net gridview dataview sorted html-table


    【解决方案1】:

    试试这个。

    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
    

    P.S:this wonderful code 的无耻端口我已经使用了多年。

    【讨论】:

    • 感谢您的回答。我必须找到另一个解决方案,所以我假设您的代码有效,因为我目前无法检查它。干杯! :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-10
    • 2010-09-10
    • 1970-01-01
    • 2011-10-16
    • 1970-01-01
    • 1970-01-01
    • 2013-09-02
    相关资源
    最近更新 更多