【问题标题】:Multi column header in ASP.NET GridViewASP.NET GridView 中的多列标题
【发布时间】:2016-03-29 18:18:23
【问题描述】:

我有一个 gridview 包含 30 列,其中几列我必须在其顶部设置单列,即我有 Leaf Name,Leaf Code,Leaf Value,Leaf Vendor Code,Leaf Id,Leaf ZOnal,Leaf Leveller 列,我需要在其顶部提供单列作为 Leaves Details。我做了以下代码在 rowdatabound 中没有成功,新的单列是最重要的。你能告诉我我做错了什么吗。我做的更重要的事情是,我设置了 gridview 属性PagerSettings Position top,这样它就可以在网格的顶部索引值 1,2,3 等。

这是我的网格视图

 <asp:GridView ID="grdcell" runat="server" AutoGenerateColumns="False" AllowPaging="true" PageSize="13" DataKeyNames="firstname,location"
                CellPadding="4" ForeColor="#333333" OnPageIndexChanging="grdNewcells_PageIndexChanging" OnRowDataBound="grdcell_RowDataBound" >
                <AlternatingRowStyle BackColor="White" ForeColor="#284775" />
                <Columns>
                    <asp:TemplateField HeaderText="Insert" HeaderStyle-HorizontalAlign="Left">
                        <HeaderTemplate>
                            <asp:CheckBox ID="insertall" Text="Insert All" onclick="checkAll(this);" runat="server" />
                        </HeaderTemplate>
                        <ItemTemplate>
                            <asp:CheckBox ID="insertChk" runat="server" />
                        </ItemTemplate>
                        <HeaderStyle HorizontalAlign="Left"></HeaderStyle>
                    </asp:TemplateField>
                    <asp:BoundField DataField="Leaf_NAME" HeaderText="Leaf Name" SortExpression="Leaf_NAME"></asp:BoundField>
                    <asp:BoundField DataField="Leaf_CODE" HeaderText="Leaf Code" SortExpression="Leaf_CODE"></asp:BoundField>
                    <asp:BoundField DataField="Leaf_Value" HeaderText="Leaf Value" SortExpression="Leaf_Value"></asp:BoundField>
                    <asp:BoundField DataField="LeafVENDOR_CODE" HeaderText="Leaf Vendor Code" SortExpression="LeafVENDOR_CODE"></asp:BoundField>
                    <asp:BoundField DataField="Leaf_ID" HeaderText="Leaf Id" SortExpression="Leaf_ID"></asp:BoundField>
                    <asp:BoundField DataField="Leaf_ZOnal" HeaderText="Leaf ZOnal" SortExpression="Leaf_ZOnal"></asp:BoundField>
                    <asp:BoundField DataField="Leaf_Leveller" HeaderText="Leaf Leveller" SortExpression="Leaf_Leveller"></asp:BoundField>
                    <asp:BoundField DataField="Loaction" HeaderText="Loaction" SortExpression="Loaction"></asp:BoundField>

以及我在row data bound 中所做的代码如下所示

GridViewRow gvRow = e.Row;
                if (gvRow.RowType == DataControlRowType.Header)
                {
                    if (gvRow.Cells[1].Text == "Leaf_NAME")
                    {
                        gvRow.Cells.Remove(gvRow.Cells[1]);
                        GridViewRow gvHeader = new GridViewRow(0, 0, DataControlRowType.DataRow, DataControlRowState.Insert);
                        TableCell headerCell0 = new TableCell()
                        {
                            Text = "Leaves Details",
                            HorizontalAlign = HorizontalAlign.Center,
                            RowSpan = 6
                        };

                        gvHeader.Cells.Add(headerCell0);

                        grdcell.Controls[0].Controls.AddAt(0, gvHeader);
                    }
                }

【问题讨论】:

  • 我和@peter 有同样的问题。在我目前的工作中,我不得不在很多地方做类似的事情,但我使用了相反的方法:一个带有包含子列的 TemplateField 的单列。
  • 是同一个问题吗??你有代码吗?
  • 哎呀,对不起,我很困惑。我以为彼得是评论你帖子的人,但你自己评论了。
  • 我可以在答案中告诉你我的代码的想法。顺便说一句,我也被你的一行代码弄糊涂了:RowSpan = 6。不应该是ColumnSpan = 6吗?如果是这样,您不应该删除标题行中的 5 个原始单元格吗?
  • 我认为我的代码有问题,你能发布你的建议代码吗,记住我的 PagerSettings 位置置顶

标签: c# asp.net .net gridview


【解决方案1】:

我是通过以下链接完成的,但我使用了 gridview 行创建事件

single column for multiple column

【讨论】:

    【解决方案2】:

    为了在一个公共标题(带有子标题)中“分组”几个列,我使用了一个 TemplateField。对于 2 个子列,它看起来像这样:

    <asp:TemplateField HeaderStyle-HorizontalAlign="Center">
        <HeaderTemplate>
            <table runat="server" class="leafCommonHeader" align="center" cellpadding="0" cellspacing="0">
                <tr class="multiColumnMainHeader">
                    <td colspan="2">
                        <asp:Label runat="server" CssClass="leafHeader" Text="Leaf Details" />
                    </td>
                </tr>
                <tr runat="server">
                    <td class="leafNameField">
                        <asp:LinkButton runat="server" CssClass="leafHeader" OnCommand="gvLeavesColumnSort" CommandArgument="LeafName" Text="Name" />
                    </td>
                    <td class="leafNameField">
                        <asp:LinkButton runat="server" CssClass="leafHeader" OnCommand="gvLeavesColumnSort" CommandArgument="LeafCode" Text="Code" />
                    </td>
                </tr>
            </table>
        </HeaderTemplate>
        <ItemTemplate>
            <table runat="server" class="leafCommonItem" cellpadding="0" cellspacing="0">
                <tr>
                    <td class="leafNameField">
                        <asp:Literal runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "LeafName")) %>' />
                    </td>
                    <td class="leafCodeField">
                        <asp:Literal runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "LeafCode") %>' />
                    </td>
                </tr>
            </table>
        </ItemTemplate>
    </asp:TemplateField>
    

    子标题中的链接按钮用于实现子列的排序。我包含了一些CssClass 属性,允许自定义单元格和标签。例如,CSS 类 leafNameFieldleafCodeField 可以设置其列的 with。

    免责声明:此代码未在打开分页的情况下进行测试。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-27
      • 2011-03-23
      • 1970-01-01
      • 2019-12-25
      • 2020-01-06
      • 1970-01-01
      相关资源
      最近更新 更多