2014-07-10 5 views
0

셀 (0)의 텍스트가 동일하고 행을 병합 할 경우 gridview의 셀을 병합하려고합니다. 문제는 내 병합 된 셀 내 HTML과 비주얼 베이직 코드를 검색 측면보다는 다른병합 된 gridview 행이 나란히 표시됩니다.

아래 하나 나란히 표시입니다

<%@ Page Language="vb" AutoEventWireup="false" CodeBehind="WebForm1.aspx.vb" Inherits="WebApplication1.WebForm1" %> 

<!DOCTYPE html> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 

    </div> 
     <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" OnDataBound="GridView1_DataBound"> 
      <Columns> 
       <asp:BoundField DataField="This" HeaderText="This" /> 
       <asp:BoundField DataField="Is" HeaderText="Is" /> 
       <asp:BoundField DataField="A" HeaderText="A" /> 
       <asp:BoundField DataField="Test" HeaderText="Test" /> 
      </Columns> 
     </asp:GridView> 
    </form> 
</body> 
</html> 

VB 코드 당신이 필요로하는 것처럼 들리

Public Class WebForm1 
    Inherits System.Web.UI.Page 

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 

     Dim dt As DataTable = New DataTable() 
     dt.Columns.Add("this") 
     dt.Columns.Add("is") 
     dt.Columns.Add("a") 
     dt.Columns.Add("test") 


     Dim dr As DataRow = dt.NewRow() 
     dr("this") = "data1" 
     dr("is") = "data1" 
     dr("a") = "data1" 
     dr("test") = "data1" 
     dt.Rows.Add(dr) 

     dr = dt.NewRow() 
     dr("this") = "data1" 
     dr("is") = "data1" 
     dr("a") = "data1" 
     dr("test") = "data1" 
     dt.Rows.Add(dr) 

     dr = dt.NewRow() 
     dr("this") = "data1" 
     dr("is") = "data1" 
     dr("a") = "data1" 
     dr("test") = "data1" 
     dt.Rows.Add(dr) 

     dr = dt.NewRow() 
     dr("this") = "data2" 
     dr("is") = "data2" 
     dr("a") = "data2" 
     dr("test") = "data2" 
     dt.Rows.Add(dr) 


     dr = dt.NewRow() 
     dr("this") = "data2" 
     dr("is") = "data2" 
     dr("a") = "data2" 
     dr("test") = "data2" 
     dt.Rows.Add(dr) 


     dr = dt.NewRow() 
     dr("this") = "data3" 
     dr("is") = "data3" 
     dr("a") = "data3" 
     dr("test") = "data3" 
     dt.Rows.Add(dr) 


     dr = dt.NewRow() 
     dr("this") = "data4" 
     dr("is") = "data4" 
     dr("a") = "data4" 
     dr("test") = "data4" 
     dt.Rows.Add(dr) 


     dr = dt.NewRow() 
     dr("this") = "data4" 
     dr("is") = "data4" 
     dr("a") = "data4" 
     dr("test") = "data4" 
     dt.Rows.Add(dr) 


     dr = dt.NewRow() 
     dr("this") = "data4" 
     dr("is") = "data4" 
     dr("a") = "data4" 
     dr("test") = "data4" 
     dt.Rows.Add(dr) 


     GridView1.DataSource = dt 
     GridView1.DataBind() 

    End Sub 

    Protected Sub GridView1_DataBound() Handles GridView1.DataBound 
     For rowIndex As Integer = GridView1.Rows.Count - 2 To 0 Step -1 
      Dim row As GridViewRow = GridView1.Rows(rowIndex) 
      Dim previousRow As GridViewRow = GridView1.Rows(rowIndex + 1) 

      If row.Cells(0).Text = previousRow.Cells(0).Text Then 
       For cellIndex As Integer = 0 To row.Cells.Count - 1 
        If previousRow.Cells(cellIndex).RowSpan < 2 Then 
         row.Cells(cellIndex).RowSpan = 2 
        Else 
         row.Cells(cellIndex).RowSpan = previousRow.Cells(cellIndex).RowSpan + 1 
        End If 

        If cellIndex <> 1 AndAlso cellIndex <> 2 Then 
         previousRow.Cells(cellIndex).Controls.Clear() 
         previousRow.Cells(cellIndex).Controls.Clear() 
        End If 
       Next 
       'previousRow.Visible = False 
      End If 

     Next 
    End Sub 


End Class 

답변

1

할일은 실제로 펼쳐지는 셀을 제거하는 것입니다. RowSpan = 2 셀을 제공하면 해당 셀이 아직 남아 있습니다.

GridViewRow.Cells.RemoveAt(index); 
관련 문제