2012-06-20 3 views
0

다음은 대략 다음과 같은 사용자 정의 GridView (실제로는 RadGrid)을 만들었습니다.GridView (.NET 3.5 용)에 Rowspan을 구현하는 방법

  1. 초기화의 GridView 서식
  2. 설치 열이 GridView 인스턴스화, 내 페이지에 추가 할 때
  3. 내가 원하는, 행을

채우기 (데이터의 종류에 따라 표시한다) 반복되지만 비슷한 데이터의 첫 번째 행에 "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