使用GridView导出Excel的方法把GridView中的内容导出为Excel:
/// <summary> /// 将网格数据导出到Excel /// </summary> /// <param name="ctrl">网格名称(如GridView1)</param> /// <param name="FileType">要导出的文件类型(Excel:application/ms-excel)</param> /// <param name="FileName">要保存的文件名</param> public void GridViewToExcel(Control ctrl, string FileType, string FileName) { bool gridViewAllowPaging = false; if (ctrl is GridView) { gridViewAllowPaging = ((GridView)ctrl).AllowPaging; if (gridViewAllowPaging) { ((GridView)ctrl).AllowPaging = false; } } HttpContext.Current.Response.Charset = "GB2312"; HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.UTF8;//注意编码 HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(FileName, System.Text.Encoding.UTF8).ToString()); HttpContext.Current.Response.ContentType = FileType;//image/JPEG;text/HTML;image/GIF;vnd.ms-excel/msword ctrl.Page.EnableViewState = false; System.IO.StringWriter tw = new System.IO.StringWriter(); HtmlTextWriter hw = new HtmlTextWriter(tw); ctrl.RenderControl(hw); HttpContext.Current.Response.Write(tw.ToString()); HttpContext.Current.Response.End(); if (ctrl is GridView && gridViewAllowPaging) { ((GridView)ctrl).AllowPaging = true; } }
执行后报错,找到原因为GridView控件中有复选框或下拉列表等控件时要在aspx页面的<%@Page%>标签内加入EnableEventValidation = "false",如:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="CPID.aspx.cs" Inherits="WCMAS.CPID" EnableEventValidation = "false" %>
加入后不报错了,但是发现点击“导出”按钮后在IE下没反应,chrome倒是可以正常导出,调试后发现IE打开时执行到上面代码第28行,也就是HttpContext.Current.Response.End(); 的时候就没往下执行直接跳出IE窗口了。按道理不会这样的,肯定其他地方的问题。
仔细回想一下,以前客户的需求是勾选一个CheckBox就执行一下相关SQL,当时是用showModalDialog弹出的窗口,勾选CheckBox后导致Postback,因为窗口是用showModalDialog打开的,无法在当前页面刷新,就又新开一个窗口了。为了解决这个问题,在aspx页面的head标签内加入了<base target=_self>,见这里。直觉告诉我就是这里的问题,果然,注释掉<base
target=_self>后,IE能正常导出文件保存,问题解决。
时间: 2024-10-29 04:41:04