一导出到excel的功能代码
protected void Button1_Click(object sender, EventArgs e)
{
gdGridView.AllowPaging = false;//禁用分页,将数据全部导出到EXCEL
Response.Clear();
Response.Buffer = true;
Response.Charset = "GB2312";
Response.HeaderEncoding = Encoding.GetEncoding("GB2312");
Response.AddHeader("Content-Disposition", "attachment; filename=统计报表.xls");
Response.ContentEncoding = Encoding.GetEncoding("GB2312");
Response.ContentType = "application/ms-excel";
this.EnableViewState = false;
System.Globalization.CultureInfo myCItrad = new System.Globalization.CultureInfo("ZH-CN", true);
StringWriter oStringWriter = new StringWriter(myCItrad);
HtmlTextWriter oHtmlTextWriter = new HtmlTextWriter(oStringWriter);
//这里需要重新绑定数据源
this.BindGridView();
//去掉链接
for (int i = 0; i < gdGridView.Rows.Count; i++)
{
HyperLink hkl = ((HyperLink)(gdGridView.Rows[i].FindControl("HyperLink1")));
string value = hkl.Text;
gdGridView.Rows[i].Cells[1].Controls.Clear();
gdGridView.Rows[i].Cells[1].Text = value;
hkl.Dispose();
}
//去掉不必要的列
gdGridView.Columns[6].Visible = false;
this.gdGridView.RenderControl(oHtmlTextWriter);
Response.Write(oStringWriter.ToString());
Response.End();
}
二解决类型“GridView”的控件“XXXX”必须放在具有 runat=server 的窗体标记内。”的异常!
public override void VerifyRenderingInServerForm(Control control){}
三解决只能在执行 Render() 的过程中调用 RegisterForEventValidation"的异常
页面加上属性EnableEventValidation="false"就可以解决所有的问题了
四解决乱码问题(特别是文件中文名称乱码的问题)
Response.HeaderEncoding = Encoding.GetEncoding("GB2312");
Response.AddHeader("Content-Disposition", "attachment; filename=统计报表.xls");
替换原来的 Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode("统计报表", Encoding.GetEncoding("GB2312")) + ".xls");
综上其实下面的一段代码:
protected void Button1_Click(object sender, EventArgs e)
{
base.Response.Clear();
base.Response.Buffer = true;
base.Response.Charset = "GB2312";
base.Response.ContentEncoding = Encoding.UTF8;
base.Response.AddHeader("Content-Disposition", "attachment; filename=" + base.Server.UrlEncode(base.Server.HtmlEncode("/u516c/u5171/u901a/u8baf/u5f55.xls")));
base.Response.ContentType = "application/ms-excel";
StringWriter writer1 = new StringWriter();
HtmlTextWriter writer2 = new HtmlTextWriter(writer1);
this.grsAddressList.RenderControl(writer2);
base.Response.Output.Write(writer1.ToString());
base.Response.Flush();
base.Response.End();
}
是足可实现一般
的GridView导出到Excel的,但是如果GridView的AutoGenerateDeleteButton,AutoGenerateEditButton, AutoGenerateSelectButton有的设置为True了,或者GridView中有HyperLinkField类型的字段,那么就会抛出形如“类型“GridView”的控件“XXXX”必须放在具有 runat=server 的窗体标记内。”的异常!解决办法是对WebForm窗体的VerifyRenderingInServerForm方法进行Override!但又可能会出现新的问题"只能在执行 Render() 的过程中调用 RegisterForEventValidation"所以解决的办法是在页面加上属性"EnableEventValidation="false""即可解决问题.另外关注下乱码的问题就大功告成了.