2016-04-09 12 views
1

Ich habe eine Eltern-Grid-Ansicht, die Plus/Minus-Bild hat, um die Eltern-Grid-Ansicht zu erweitern, um verschachtelte Grid-Ansicht zu sehen.Bild beim Exportieren von Gridview zu Excel entfernen

Das Problem ich habe, ist, wenn ich Raster-Ansicht exportieren Sie das Bild von plus/minus zeigt als leeres Bild in Excel zu übertreffen

Datei ist es eine Möglichkeit, plus/minus Bild von Excel-Datei

zu löschen oder entfernen

Output

Export-Code

protected void btnExportExcel_Click(object sender, ImageClickEventArgs e) 
{ 

    GridSales.DataSource = q.Salesdetails(); 
    GridSales.DataBind(); 
    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("SalesReport", 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); 
    this.ClearControls(GridSales); 
    GridSales.RenderControl(htmlWriter); 
    curContext.Response.Write(strWriter.ToString()); 
    curContext.Response.End(); 
} 

Aspx-Code

<asp:GridView ID="GridSales" runat="server" CssClass="table table-bordered"> 
      <Columns> 
       <asp:TemplateField HeaderText="Preview"> 
        <ItemTemplate> 
         <img alt="" style="cursor: pointer" src="../Images/plus.png" /> 
         <asp:Panel ID="pnlproducts" runat="server" Style="display: none"> 
          <asp:GridView ID="gvProducts" runat="server" CssClass="table table-bordered"> 
           <Columns> 
           </Columns> 
          </asp:GridView> 
         </asp:Panel> 
        </ItemTemplate> 
       </asp:TemplateField> 
      </Columns> 
</asp:GridView> 

JavaScript-Code

<script type="text/javascript"> 
$("[src*=plus]").live("click", function() { 
    $(this).closest("tr").after("<tr><td></td><td colspan = '9'>" + $(this).next().html() + "</td></tr>") 
    $(this).attr("src", "../Images/minus.png"); 
}); 
$("[src*=minus]").live("click", function() { 
    $(this).attr("src", "../Images/plus.png"); 
    $(this).closest("tr").next().remove(); 
}); 

Antwort

2

Wenn Sie das img Element durch einen Image WebControl ersetzen:

<ItemTemplate> 
    <asp:Image ID="imgPlus" runat="server" AlternateText="" ImageUrl="../Images/plus.png" style="cursor: pointer" /> 
    <asp:Panel ID="pnlproducts" runat="server" Style="display: none"> 
     <asp:GridView ID="gvProducts" runat="server" CssClass="table table-bordered"> 
      <Columns> 
      </Columns> 
     </asp:GridView> 
    </asp:Panel> 
</ItemTemplate> 

Es kann so gemacht werden:

foreach (GridViewRow row in GridSales.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; 

       // In case you have other images that you want to keep 
       if (img.ID == "imgPlus") 
       { 
        cell.Controls.RemoveAt(i); 
       } 
      } 
     } 
    } 
} 
+0

danke für die Hilfe – Ayman

Verwandte Themen