如何在gridview中合并行

San*_*Aye 2 c# asp.net gridview

我在 gridview 中有一些数据如下。

在此输入图像描述

我想合并 gridview 中的行,如下所示。

在此输入图像描述

我已经在 RowDataBound() 和 PreRender() 中尝试使用以下代码,结果与我想要的不一样。

for (int rowIndex = GridView1.Rows.Count - 2; rowIndex >= 0; rowIndex--)
{
    GridViewRow gvRow = GridView1.Rows[rowIndex];
    GridViewRow gvPreviousRow = GridView1.Rows[rowIndex + 1];
    for (int cellCount = 0; cellCount < gvRow.Cells.Count; cellCount++)
    {
        if (gvRow.Cells[cellCount].Text ==
                            gvPreviousRow.Cells[cellCount].Text)
        {
            if (gvPreviousRow.Cells[cellCount].RowSpan < 2)
            {
                gvRow.Cells[cellCount].RowSpan = 2;
            }
            else
            {
                gvRow.Cells[cellCount].RowSpan =
                    gvPreviousRow.Cells[cellCount].RowSpan + 1;
            }
            gvPreviousRow.Cells[cellCount].Visible = false;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在 aspx 中,

<asp:GridView ID="GridView1" runat="server" Width="100%"
    AutoGenerateColumns = "false" AlternatingRowStyle-BackColor = "#fffccc" HeaderStyle-ForeColor ="#ffffff" 
    HeaderStyle-BackColor = "#333" AllowPaging ="true" OnRowDataBound="GridView1_RowDataBound" PageSize = "20"
    OnPageIndexChanging="GridView1_PageIndexChanging" OnPreRender="GridView1_PreRender">
    <HeaderStyle Height="30px" />
        <Columns>
            <asp:TemplateField HeaderText="Client Company">
                <ItemTemplate>
                    <asp:Label ID="lblClientCompany" runat="server" Text='<%# Eval("ClientCompany")%>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Position">
                <ItemTemplate>
                    <asp:Label ID="lblPosition" runat="server" Text='<%# Eval("Position")%>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Candidate">
                <ItemTemplate>
                    <asp:Label ID="lblCandidate" runat="server" Text='<%# Eval("Candidate")%>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Status">
                <ItemTemplate>
                    asp:Label ID="lblStatus" runat="server" Text='<%# Eval("Status")%>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
    <AlternatingRowStyle BackColor="#fffccc"  />
</asp:GridView>
Run Code Online (Sandbox Code Playgroud)

请帮助我,因为我不知道。谢谢。

Vig*_*r A 5

DataBound你需要尝试一下 方法RowDataBound

DataBound在 GridView 控件绑定到数据源后(绑定所有行后)触发。

RowDataBound当数据行绑定到 GridView 控件中的数据时,为每一行触发。

ASPX

<asp:GridView ID="GridView1" runat="server" Width="100%"
    AutoGenerateColumns = "false" AlternatingRowStyle-BackColor = "#fffccc" HeaderStyle-ForeColor ="#ffffff" 
    HeaderStyle-BackColor = "#333" AllowPaging ="true"  OnDataBound="GridView1_DataBound1" PageSize = "20"
    OnPageIndexChanging="GridView1_PageIndexChanging">
    <HeaderStyle Height="30px" />
        <Columns>
            <asp:TemplateField HeaderText="Client Company">
                <ItemTemplate>
                    <asp:Label ID="lblClientCompany" runat="server" Text='<%# Eval("ClientCompany")%>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Position">
                <ItemTemplate>
                    <asp:Label ID="lblPosition" runat="server" Text='<%# Eval("Position")%>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Candidate">
                <ItemTemplate>
                    <asp:Label ID="lblCandidate" runat="server" Text='<%# Eval("Candidate")%>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Status">
                <ItemTemplate>
                    asp:Label ID="lblStatus" runat="server" Text='<%# Eval("Status")%>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
    <AlternatingRowStyle BackColor="#fffccc"  />
</asp:GridView>
Run Code Online (Sandbox Code Playgroud)

代码隐藏

protected void GridView1_DataBound1(object sender, System.EventArgs e)
{
    for (int rowIndex = GridView1.Rows.Count - 2; rowIndex >= 0; rowIndex--)
    {
        GridViewRow gvRow = GridView1.Rows[rowIndex];
        GridViewRow gvPreviousRow = GridView1.Rows[rowIndex + 1];
        for (int cellCount = 0; cellCount < gvRow.Cells.Count; cellCount++)
        {
            if (gvRow.Cells[cellCount].Text ==
                                gvPreviousRow.Cells[cellCount].Text)
            {
                if (gvPreviousRow.Cells[cellCount].RowSpan < 2)
                {
                    gvRow.Cells[cellCount].RowSpan = 2;
                }
                else
                {
                    gvRow.Cells[cellCount].RowSpan =
                        gvPreviousRow.Cells[cellCount].RowSpan + 1;
                }
                gvPreviousRow.Cells[cellCount].Visible = false;
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)