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""即可解决问题.另外关注下乱码的问题就大功告成了.
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""即可解决问题.另外关注下乱码的问题就大功告成了.
相关文章推荐
- C# 将GridView导出为Excel注意事项
- GridView导出Excel方法源码以及注意事项
- 从GridView导出数据到Excel时的注意事项
- flex导出excel的注意事项
- GridView导出Excel需要注意的地方
- C#导出Excel的函数及注意事项
- SQL SERVER 2008导出excel时注意事项
- .net客户端导出Excel实现代码及注意事项
- SQL SERVER与Excel数据导入导出之注意事项
- .net客户端导出Excel实现代码及注意事项
- 用XML编写EXCEL文件,XML的写法注意事项,可以C#+xslt导出Excel
- VBA中数据库导出数据到Excel注意事项
- gridview 导出Excel时注意的问题
- unity3d中资源文件从MAX或者MAYA中导出的注意事项
- 【Vegas原创】页面(图表+table+GridView)导出为excel(07-12-5更新版)
- asp.net 导出 gridview 数据 excel 全部 当前页 选择行 选中行 所选行 复选框
- GridView导出Excel格式问题(科学计数法)
- GridView导出数据到excel数字变为科学记数法的问题的解决办法
- GridView导出到Excel或Word文件
- 从GridView中直接导出数据到Excel文件 处理导出乱码 类型“GridView”的控件“XXXX”必须放在具有 runat=server 的窗体标记内。”的异常