Asp.net 合并的gridview行并排显示

Asp.net 合并的gridview行并排显示,asp.net,vb.net,Asp.net,Vb.net,我正在尝试合并gridview的单元格,如果单元格(0)的文本相同,则合并行。问题是我合并的单元格并排出现,而不是一个在另一个下面 请在下面找到我的html和vb代码 <%@ Page Language="vb" AutoEventWireup="false" CodeBehind="WebForm1.aspx.vb" Inherits="WebApplication1.WebForm1" %> <!DOCTYPE html> <html xmlns="http

我正在尝试合并gridview的单元格,如果单元格(0)的文本相同,则合并行。问题是我合并的单元格并排出现,而不是一个在另一个下面

请在下面找到我的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
公共类WebForm1
继承System.Web.UI.Page
受保护的子页加载(ByVal sender作为对象,ByVal e作为System.EventArgs)处理Me.Load
作为数据表的Dim dt=新数据表()
dt.列。添加(“本”)
dt.列。添加(“is”)
dt.列。添加(“a”)
dt.列。添加(“测试”)
Dim dr As DataRow=dt.NewRow()
dr(“此”)=“数据1”
dr(“is”)=“数据1”
dr(“a”)=“数据1”
dr(“测试”)=“数据1”
dt.行.添加(dr)
dr=dt.NewRow()
dr(“此”)=“数据1”
dr(“is”)=“数据1”
dr(“a”)=“数据1”
dr(“测试”)=“数据1”
dt.行.添加(dr)
dr=dt.NewRow()
dr(“此”)=“数据1”
dr(“is”)=“数据1”
dr(“a”)=“数据1”
dr(“测试”)=“数据1”
dt.行.添加(dr)
dr=dt.NewRow()
dr(“此”)=“数据2”
dr(“is”)=“数据2”
dr(“a”)=“数据2”
dr(“测试”)=“数据2”
dt.行.添加(dr)
dr=dt.NewRow()
dr(“此”)=“数据2”
dr(“is”)=“数据2”
dr(“a”)=“数据2”
dr(“测试”)=“数据2”
dt.行.添加(dr)
dr=dt.NewRow()
dr(“this”)=“data3”
dr(“is”)=“数据3”
dr(“a”)=“数据3”
dr(“测试”)=“数据3”
dt.行.添加(dr)
dr=dt.NewRow()
dr(“this”)=“data4”
dr(“is”)=“数据4”
dr(“a”)=“数据4”
dr(“测试”)=“数据4”
dt.行.添加(dr)
dr=dt.NewRow()
dr(“this”)=“data4”
dr(“is”)=“数据4”
dr(“a”)=“数据4”
dr(“测试”)=“数据4”
dt.行.添加(dr)
dr=dt.NewRow()
dr(“this”)=“data4”
dr(“is”)=“数据4”
dr(“a”)=“数据4”
dr(“测试”)=“数据4”
dt.行.添加(dr)
GridView1.DataSource=dt
GridView1.DataBind()
端接头
受保护的子GridView1_DataBound()处理GridView1.DataBound
对于rowIndex As Integer=GridView1.Rows.Count-2到0步骤-1
作为GridViewRow=GridView1.Rows(rowIndex)调整行的尺寸
将上一行变暗为GridViewRow=GridView1.行(行索引+1)
如果row.Cells(0.Text=previousRow.Cells(0.Text),则
对于cellIndex,整数=0到row.Cells.Count-1
如果前面的row.Cells(cellIndex.RowSpan)小于2,则
row.Cells(cellIndex).RowSpan=2
其他的
row.Cells(cellIndex).RowSpan=previousRow.Cells(cellIndex).RowSpan+1
如果结束
如果单元格索引1和单元格索引2,则
previousRow.Cells(cellIndex.Controls.Clear()
previousRow.Cells(cellIndex.Controls.Clear()
如果结束
下一个
'previousRow.Visible=False
如果结束
下一个
端接头
末级

听起来您需要做的是实际删除正在跨越的单元格。当你给一个单元格
行span=2
时,你跨入的单元格仍然在那里-它只是被撞倒了

GridViewRow.Cells.RemoveAt(index);