您的位置:首页 > 其它

gridview导出到excel的几个注意事项

2009-07-21 13:54 344 查看
一导出到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""即可解决问题.另外关注下乱码的问题就大功告成了.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: