.net C# GridView数据导出到excl及所遇到的问题

导出全部数据到excel;

代码如下:

View Code
 1  protected void btnExport_Click(object sender, EventArgs e)
2 {
3 Response.Clear();
4 Response.Buffer = true;
5 Response.Charset = "utf-8";
6 string FileName;
7 FileName = DateTime.Now.ToString("yyyyMMddHHmmssfff") + ".xls";
8 Response.AddHeader("Content-Disposition", "attachment;filename=" + FileName);
9 Response.ContentType = "application/ms-excel";
10 Response.Write("<meta http-equiv=Content-Type content=text/html;charset=utf-8>");
11 StringWriter strWriter = new StringWriter();
12 HtmlTextWriter htWriter = new HtmlTextWriter(strWriter);
13 gvProvince.AllowPaging = false;
14 gvProvince.PagerSettings.Visible = false;
15 gvProvince.AllowSorting = false;
16 BindgvProvince();
17 gvProvince.RenderControl(htWriter);
18 Response.Write(strWriter.ToString());
19 Response.End();
20 gvProvince.AllowPaging = true;
21 gvProvince.PagerSettings.Visible = true;
22 BindgvProvince();
23 }
24 public override void VerifyRenderingInServerForm(Control control)
25 {
26
27 }

先让gridview的分页效果为false,这样就可以导出全部数据,当导出数据以后让分页效果为true;

记住必须加下面那个空处理的函数重写 要不然导出会出现错误;

  Response.Write("<meta http-equiv=Content-Type content=text/html;charset=utf-8>");

这段代码防止导出时候出现乱码;

效果如下图:

 导出当前页只需要在导出的时候不把分页效果设置为false就可以:

代码如下:

View Code
 1   protected void Button2_Click(object sender, EventArgs e)
2 {
3 Response.Clear();
4 Response.Buffer = true;
5 Response.Charset = "utf-8";
6 string FileName;
7 FileName = DateTime.Now.ToString("yyyyMMddHHmmssfff") + ".xls";
8 Response.AddHeader("Content-Disposition", "attachment;filename=" + FileName);
9 Response.ContentType = "application/ms-excel";
10 Response.Write("<meta http-equiv=Content-Type content=text/html;charset=utf-8>");
11 StringWriter strWriter = new StringWriter();
12 HtmlTextWriter htWriter = new HtmlTextWriter(strWriter);
13 gvProvince.PagerSettings.Visible = false;
14 gvProvince.AllowSorting = false;
15 BindgvProvince();
16 gvProvince.RenderControl(htWriter);
17 Response.Write(strWriter.ToString());
18 Response.End();
19 gvProvince.AllowPaging = true;
20 gvProvince.PagerSettings.Visible = true;
21 BindgvProvince();
22 }

那个空处理函数也是必须操作的,当然你要是在一个页面中有导出当前页和导出全部数据

那么只需要存在一次就可以;

效果如下:

有人说在导出当前页的时候会出现把分页行也到出来:

其实质需要在导出数据时候把分行设置为不显示导出后设置为显示 就可以了:

就是通过改变gridview的PagerSetting是属性就可以;

    gvProvince.PagerSettings.Visible = false;
        gvProvince.AllowSorting = false;
        BindgvProvince();
        gvProvince.RenderControl(htWriter);
        Response.Write(strWriter.ToString());
        Response.End();
        gvProvince.AllowPaging = true;
        gvProvince.PagerSettings.Visible = true;

 

要是在导出时候出现<pages enableEventValidation="true"/>或好像 gvProvince.RenderControl(htWriter)的问题 只需要在页面中加入<%@ Page Language="C#"  

 EnableEventValidation ="false" AutoEventWireup="true" CodeFile="fromProvince.aspx.cs" Inherits="Province_fromProvince" %>

posted on 2011-10-06 15:44  C#+sql  阅读(1590)  评论(0编辑  收藏  举报