2012-06-20 110 views
0

我創建了一個自定義GridView(實際上是RadGrid),它大致做了以下操作。如何在GridView中實現Rowspan(用於.NET 3.5)

  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

enter image description here

回答

2

試試這個。

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我一直在使用多年。

+0

感謝您的回答。我不得不尋找另一個解決方案,所以我只是假設你的代碼工作,因爲我目前無法檢查它。乾杯! :) – Chiramisu

+0

@Chiramisu:請檢查並標記... – naveen