前提条件:你的GridView已经能正常显示数据了,不管你是用代码实现的,还是直接绑定数据库实现的。
1、如果你的GridView启动了分页功能,则要先将该功能关闭,即将allowpaging的属性设为false, AllowPaging="false";然后重新调用databind()或者你自己定义的显示函数,确保所有的数据都显示在GridView中,再导完数据之后,记得把allowpaging的属性值改回来。
2、在页面中添加一个"导出"按钮,当点击该按钮时执行导出动作。双击改按钮,编写事件处理函数,添加代码如下:在用到StringWriter类的时候,要在。aspx.cs文件的头部添加命名空间:using System.IO;
protected void Button1_Click(object sender, EventArgs e)
{ //导出到Excel中(.xls文件)
<p> Response.Clear();
Response.Buffer = true;
//设置输出流的HTTP字符集
Response.Charset = "GB2312";
//Response.ClearContent();
//Response.AddHeader("content-disposition", "attachment;filename=MyExcel.xls");//设置输出文件类型为excel文件。
//这行代码解决excel表名乱码
Response.AppendHeader("Content-Disposition", "attachment;filename=\"" + HttpUtility.UrlEncode("行车轨迹.xls", System.Text.Encoding.UTF8) + "\"");</p><p> //Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");//用这个会出现中文是乱码的情况,所以选用下面这句
Response.ContentEncoding = System.Text.Encoding.UTF8;</p> /*
导出时会弹出对话框让你确认保存位置,默认的文件名为MyExcel2.xls,
你可以选择保存,也可以直接打开
*/
Response.ContentType = "application/excel";
/*
如果想将文件导出到word中,则将上面的"MyExcel2.xsl"改成"MyWord.doc",
将"application/excel"改成"application/word"
*/
StringWriter sw = new StringWriter();
HtmlTextWriter htw = new HtmlTextWriter(sw);
GridView1.AllowPaging = false;
GridView1.DataBind();
GridView1.RenderControl(htw);
Response.Write(sw.ToString());
Response.End();
GridView1.AllowPaging = true;
}
3、重写VerifyRenderingInServerForm 函数,这样才能确保运行时为指定的ASP.NET 服务器控件呈现HtmlForm 控件;函数的内容可以为空:
public override void VerifyRenderingInServerForm(Control control)
{
}
4、当出现"只能在执行Render() 的过程中调用 RegisterForEventValidation;"错误时
EnableEventValidation属性是 .NET Framework 2.0 中是新增的属性,默认的情况下该属性的值为true;通过这个新增的功能ASP.NET会检查 POST方法中的所带的参数,如果认为不合法,就会抛出异常。这个设计的目的是为了防止恶意用户利用post 方法发送一些恶意数据,但是有时也会出现类似上面的错误。
只要禁止这个功能,问题就能得到解决。可以通过以下两种途径解决:
(1)、在Web.Config文件中:在<system.web></system.web>标记中添加如下代码:
<system.web>
<pages enableEventValidation="false"> </pages>
</system.web>
(2)、在具体的.aspx页面的源代码中修改代码,如下:
<%@ Page Language="C#" EnableEventValidation="false" AutoEventWireup="true" CodeFile="GridView_Export_Excel.aspx.cs" Inherits="GridView_Export_Excel" %>
5、gridview导出到excel是aspx文件,一般情况下,迅雷会关联所有下载文件类型
网上说是:把迅雷的监视剪贴板和监视浏览器关闭。再把迅雷退出应该就可以了。
我自己的办法是把迅雷卸了,当然这不是好办法,待解决!!!