简体   繁体   English

如何在RowDatabound之外查找子视图

[英]How to find child view outside rowdatabound

I have tow grid views master grid is gridpurchase and child grid is gvItems 我有两个网格视图,主网格是gridpurchase ,子网格是gvItems

I am trying to hide some columns in gvItems when exporting the grids to excel file. 将网格导出到excel文件时,我试图隐藏gvItems中的某些列。

i have tried the below code but it didn't work 我已经尝试了下面的代码,但是没有用

Exporting code 汇出程式码

protected void btnexcel_Click(object sender, EventArgs e)
{
    gridpurchase.DataSource = po.GetPurchaseOrders();
    gridpurchase.DataBind();
    GridView gvItems = gridpurchase.FindControl("gvItems") as GridView;
    gvItems.Columns[0].Visible = false;
    gridpurchase.GridLines = GridLines.Both;
    foreach (GridViewRow row in gridpurchase.Rows)
    {
        foreach (TableCell cell in row.Cells)
        {
            for (int i = cell.Controls.Count - 1; i >= 0; i--)
            {
                if (cell.Controls[i] is Image)
                {
                    Image img = cell.Controls[i] as Image;


                    if (img.ImageUrl.Contains("plus.png") || img.ImageUrl.Contains("minus.png"))
                    {
                        cell.Controls.RemoveAt(i);
                    }
                }
            }
        }
    }
    gridpurchase.Caption = "Purchase Orders Report";
    System.Web.HttpContext curContext = System.Web.HttpContext.Current;
    System.IO.StringWriter strWriter = null;
    System.Web.UI.HtmlTextWriter htmlWriter = null;
    curContext.Response.Clear();
    curContext.Response.Buffer = true;
    curContext.Response.AddHeader("content-disposition", "attachment; filename=" + System.Web.HttpUtility.UrlEncode("PurchaseOrdersReport", System.Text.Encoding.UTF8) + ".xls");
    curContext.Response.ContentType = "application/vnd.ms-excel";
    curContext.Response.Write("<meta http-equiv=Content-Type content=text/html;charset=UTF-8>");
    strWriter = new System.IO.StringWriter();
    htmlWriter = new System.Web.UI.HtmlTextWriter(strWriter);
    gridpurchase.RenderControl(htmlWriter);
    curContext.Response.Write(strWriter.ToString());
    curContext.Response.End();
}

Grid-view 网格视图

<asp:GridView ID="gridpurchase" OnRowCommand="gridpurchase_RowCommand" OnRowDataBound="gridpurchase_RowDataBound" DataKeyNames="RequisitionID" GridLines="None" runat="server" CssClass="table text-nowrap" 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="pnlproducts" runat="server" Style="display: none">
                    <asp:GridView ID="gvItems" CssClass="table table-bordered" runat="server" AutoGenerateColumns="false">
                        <Columns>
                            <asp:BoundField DataField="ItemName" HeaderText="Item Name" SortExpression="ItemName" />
                        </Columns>
                    </asp:GridView>
                </asp:Panel>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:BoundField DataField="SupplierName" HeaderText="Supplier Name" SortExpression="SupplierName" />
        <asp:BoundField DataField="PurchaseOrderCode" HeaderText="Purchase Order Code" SortExpression="PurchaseOrderCode" />
    </Columns>
</asp:GridView>

According to your markup, there is a gvItems GridView inside of each row of gridpurchase . 根据您的标记,在gvItems的每一行中gridpurchase一个gvItems GridView。 You can retrieve every child GridView in your main loop: 您可以在主循环中检索每个子GridView:

foreach (GridViewRow row in gridpurchase.Rows)
{
    GridView gvItems = row.FindControl("gvItems") as GridView;
    gvItems.Columns[0].Visible = false;

    foreach (TableCell cell in row.Cells)
    {
        ...
    }
}

Change your foreach loop like this 像这样改变你的foreach循环

gridpurchase.HeaderRow.Cells[0].Visible = false;
foreach (GridViewRow row in gridpurchase.Rows)
{
    row.Cells[0].Visible = false;
}

This will remove the first column from your asp:GridView 这将从asp:GridView删除第一列

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM