2014-07-10 49 views
0

我想合并gridview的单元格,如果单元格(0)的文本相同,则合并行。问题是我的合并单元格出现并排而不是一个低于其他并行显示合并的gridview行

请在下面找到我的HTML和VB代码

<%@ 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);