2016-08-12 61 views
0

我拖網格視圖主電網是gridpurchase和兒童電網gvItems如何找到孩子視野之外的RowDataBound

我嘗試導出網格來的Excel文件時隱藏在gvItems一些列。

我曾嘗試下面的代碼,但沒有奏效

導出代碼

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(); 
} 

網格視圖

<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> 
+0

請後剩餘的代碼中刪除第一列如何你正在創建Excel工作表。 –

+0

代碼現在發佈 – Ayman

+0

在導出爲ex​​cel之前,您想要從gridview中刪除所有列嗎? – naveen

回答

1

根據您的標記,有一個gvItems GridView裏面的每行gridpurchase。您可以在主循環獲取每一個孩子的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) 
    { 
     ... 
    } 
} 
0

更改foreach循環這樣

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

這將從asp:GridView