将 gridview 导出到 excel 时删除图像
Remove image when exporting gridview to excel
我有一个包含 plus/minus 图像的父网格视图,可以展开父网格视图以查看嵌套的网格视图。
我遇到的问题是当我将网格视图导出到 excel 时 plus/minus 的图像在 excel 文件
中显示为空白图像
有什么方法可以从 excel 文件
中清除或删除 plus/minus 图像
导出代码
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 代码
<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代码
<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();
});
如果用 Image
WebControl 替换 img
元素:
<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>
可以这样做:
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);
}
}
}
}
}
我有一个包含 plus/minus 图像的父网格视图,可以展开父网格视图以查看嵌套的网格视图。
我遇到的问题是当我将网格视图导出到 excel 时 plus/minus 的图像在 excel 文件
中显示为空白图像有什么方法可以从 excel 文件
中清除或删除 plus/minus 图像导出代码
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 代码
<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代码
<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();
});
如果用 Image
WebControl 替换 img
元素:
<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>
可以这样做:
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);
}
}
}
}
}