导出到 excel 文件时隐藏子 gridview 列

Hide child gridview columns when exporting to excel file

使用可见选项将网格视图导出到 excel 文件时,我能够隐藏父网格视图中的列。

但我还需要在子网格视图中隐藏一些列。

我怎样才能做到这一点?

导出代码

protected void btnexcel_Click(object sender, EventArgs e)
{
    try
    {
        gridItem.DataSource = i.GetItems();
        Response.Clear();
        Response.Buffer = true;
        Response.AddHeader("content-disposition",
         "attachment;filename=Items.xls");
        Response.Charset = "";
        Response.ContentType = "application/vnd.ms-excel";
        StringWriter sw = new StringWriter();
        HtmlTextWriter hw = new HtmlTextWriter(sw);
        gridItem.GridLines = GridLines.Both;
        gridItem.DataBind();
        gridItem.Columns[0].Visible = false;
        gridItem.RenderControl(hw);
        //style to format numbers to string
        string style = @"<style> .textmode { mso-number-format:\@; } </style>";
        Response.Write(style);
        Response.Output.Write(sw.ToString());
        Response.Flush();
        Response.End();
    }
    catch (Exception ex)
    {
        Response.Write("Error: " + ex.Message);
    }
}

Aspx 代码

<asp:GridView ID="gridItem" GridLines="None" OnRowDataBound="gridItem_RowDataBound" OnRowCommand="gridItem_RowCommand" DataKeyNames="ItemID" runat="server" CssClass="table" AutoGenerateColumns="False">
    <Columns>
        <asp:TemplateField HeaderText="Preview">
            <ItemTemplate>
                <asp:Image ID="imgPlus" runat="server" AlternateText="" ImageUrl="img/plus.png" Style="cursor: pointer" />
                <asp:Panel ID="pnItemdt runat="server" Style="display: none">
                    <asp:GridView ID="gvItemdt" CssClass="table table-bordered" runat="server" OnRowCommand="gvItemdt_RowCommand" AutoGenerateColumns="false">
                        <Columns>
                            <asp:TemplateField HeaderText="Edit">
                                <ItemTemplate>
                                    <asp:LinkButton ID="LinkButton1" OnClientClick="gotop()" runat="server" CssClass="btn btn-primary btn-xs" CausesValidation="False" CommandName="Editob" Text=""><i class="glyphicon glyphicon-pencil"></i></asp:LinkButton>
                                </ItemTemplate>
                                <ControlStyle CssClass="btn btn-primary" />
                            </asp:TemplateField>
                            <asp:BoundField DataField="Name" HeaderText="Store Name" />
                        </Columns>
                        <EmptyDataTemplate>
                            "No records found"
                        </EmptyDataTemplate>
                    </asp:GridView>
                </asp:Panel>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:BoundField DataField="ItemCode" HeaderText="Item Code" SortExpression="ItemCode" />
        <asp:BoundField DataField="ItemName" HeaderText="Item Name" SortExpression="ItemName" />

    </Columns>

</asp:GridView>

提前致谢。

通常,您可以使用 gridView.FindControl("id-of-control") 访问 GridView 中的控件。

在这种情况下,您可能会这样做。

gridItem.FindControl("gvItemdt") //this gets you the GridView control
//you can use DirectCast to call a GridView function on the object
DirectCast(gridItem.FindControl("gvItemdt"), GridView).Visible=False

这就是您访问内部 GridView 并将其设置为 visible=false 的方式。如果您想访问内部 GridView 中的特定列或控件,只需在 gridItem.FindControl("gvItemdt") GridView 上调用相同的 .FindControl() 函数即可。或者通过列和行访问项目,但是你想这样做。