关于DataGridView导出至Excel的例子其实很多,但是俺今天还是要个贴出来see毕竟自己也遇到些问题解决了啊。好了 废话不说。Start!
首先要写一个导出至Excel的方法:
public void ExcelExport(GridView gdv)
{
Response.ClearContent();
Response.Clear();
Response.BufferOutput = true;
Response.Charset = "UTF-8"; //这里设置UTF-8,要与页面的字符集统一编码
Response.AddHeader("content-disposition", "attachment; filename=MyExcelFile.xls");//要导出的文件名称
Response.ContentEncoding = System.Text.Encoding.UTF7;
Response.HeaderEncoding = System.Text.Encoding.UTF7;
Response.ContentType = "application/excel";//要导出的文件类型
EnableViewState = false;
StringWriter sw = new StringWriter();
HtmlTextWriter htw = new HtmlTextWriter(sw);
gdv.RenderControl(htw);
Response.Write(sw.ToString());
Response.End();
}
如果你的DateGridView设置了分页,但你要导出全部的数据,你就需要先将DateGridView的
gdv.AllowPaging = false; 然后在绑定DateGridView数据方法
最后在Respon.End()后面在设置gdv.AllowPanging=true; 在绑定DateGridView
//必须重写此方法。否则会报“DateGridView的控件Ct00_ContentHoler_Gridvew 必须在具有runat=“server”的窗体标记中”
public override void VerifyRenderingInServerForm(Control control)
{
//base.VerifyRenderingInServerForm(control);
}
然后还需要在你的页面中设置EnableEventValidation="false"
至此以上步骤即可导出至Excel。但是问题所在不是这里,是在我同一个页面,两个DateGridView,同样的数据,但是导出来的却是一个是乱码,一个不是乱码的,当时为这个很头痛,网上的许多方法都试过,像设置“<mate charset="UTF-8" >,或网上说的最多的是设置Response.ContentEncoding = System.Text.Encoding。Gb2312.” ,但是我们的项目是多国使用的,只能用UTF-8。于是 我就自己试着每个字符集C#中每个字符集去试,到最后使用到UTf-7的时候,哈哈,导出来不乱了。但是具体为什么utf-7我也不知道为什么。(知道的朋友可以发帖),最后我们项目组的Excel的导出都使用的这个方法,没有出现乱码。
这是俺第一次自己写的文章,文笔不好,请大家见谅