GridView导入至EXCEL

  1. //注:在.aspx文件中第一行<%%>中加入EnableEventValidation="false"   
  2. <%@ Page Language="C#" AutoEventWireup="true" CodeFile="CardSelect.aspx.cs" Inherits="PersonMag" EnableEventValidation="false" %>   
  3.     
  4. //这里一定要引入命名空间   
  5. using System.Data.SqlClient;   
  6. //为导入Excel引入命名空间   
  7. using System.Drawing;   
  8. using System.IO;   
  9. using System.Text;   
  10.     
  11. private void GridViewBind()   
  12.     {   
  13.         //GridView的绑定   
  14.     }   
  15.     private void Export(string FileType, string FileName)   
  16.     {   
  17.         //GridView导出到Excel,导出所有页   
  18.         Response.Charset = "GB2312";   
  19.         Response.ContentEncoding = System.Text.Encoding.UTF8;//换成UTF7编码出现乱码   
  20.         Response.AppendHeader("Content-Disposition","attachment;filename="+HttpUtility.UrlEncode(FileName,System.Text.Encoding.UTF8).ToString());   
  21.         Response.ContentType = FileType;   
  22.         this.EnableViewState = false;   
  23.         StringWriter tw = new StringWriter();   
  24.         HtmlTextWriter hw = new HtmlTextWriter(tw);   
  25.            
  26.         this.GridView1.AllowPaging = false;//取消分页   
  27.      this.GridView1.AllowSorting = false;//取消排序   
  28.    //this.GridView1.AutoGenerateColumns = true;//取消自动生成列   
  29.         this.GridViewBind();//GridView的独立绑定函数   
  30.     
  31.         GridView1.RenderControl(hw);   
  32.         Response.Write(tw.ToString());   
  33.         Response.End();   
  34.     }   
  35.     protected void btnSqlToExcel_Click(object sender, EventArgs e)   
  36.     {   
  37.         //SqlToExcel按钮响应的事件   
  38.         Export("application/ms-excel""信息表.xls");//第一个参数是导出的类型,第二个参数是导出表的名称   
  39.     }   
  40.     public override void VerifyRenderingInServerForm(Control control)   
  41.     {   
  42.         //重写此方法,确保程序运行时,指定的GridView控件总是位于标记内   
  43.         //base.VerifyRenderingInServerForm(control);   
  44. }  

 

方案二:

 

  1. public void CreateExcel(DataSet ds, string FileName)   
  2.   {   
  3.       StringBuilder sb = new StringBuilder();   
  4.       StringBuilder sbb = new StringBuilder();   
  5.       HttpResponse resp;   
  6.       resp = Page.Response;   
  7.       resp.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");   
  8.       resp.ContentType = "application/ms-excel";   
  9.       resp.AddHeader("Content-Disposition""attachment; filename=" + System.Web.HttpUtility.UrlEncode(FileName, System.Text.Encoding.UTF8) + ".xls");   
  10.       this.EnableViewState = false;   
  11.       string colHeaders = "", Is_item = "";   
  12.       int i = 0;   
  13.       //定义表对象与行对象,同时使用DataSet对其值进行初始化   
  14.       DataTable dt = ds.Tables[0];   
  15.       DataRow[] myRow = dt.Select("");   
  16.       //取得数据表各列标题,标题之间以\t分割,最后一个列标题后加回车符   
  17.       colHeaders += "";   
  18.       colHeaders += "\" mce_style="\""font-weight: bold; white-space: nowrap;\">";   
  19.       for (i = 0; i < dt.Columns.Count; i++)   
  20.       {   
  21.           colHeaders += "" + dt.Columns[i].Caption.ToString() + "";   
  22.       }   
  23.       colHeaders += "";   
  24.       resp.Write(colHeaders);   
  25.       //逐行处理数据   
  26.       foreach (DataRow row in myRow)   
  27.       {   
  28.           Is_item += "";   
  29.           //在当前行中,逐列取得数据,数据之间以\t分割,结束时加回车符\n   
  30.           for (i = 0; i < dt.Columns.Count; i++)   
  31.           {   
  32.               if (dt.Columns[i].ColumnName.Equals("银行帐号") || dt.Columns[i].ColumnName.Equals("身份证号"))   
  33.                   Is_item += "\" mce_style="\""vnd.ms-excel.numberformat:@\">" + row[i].ToString() + "";   
  34.               else  
  35.                   Is_item += "" + row[i].ToString() + "";   
  36.           }   
  37.           Is_item += "";   
  38.           resp.Write(Is_item);   
  39.           Is_item = "";   
  40.       }   
  41.       resp.Write("");   
  42.       //写缓冲区中的数据到HTTP头文件中   
  43.       resp.End();   
  44.   }  
在实现"将GridView中的数据导出到Excel中"的时候出现了如下错误:
用户代码未处理 InvalidOperationException 
只能在执行 Render() 的过程中调用 RegisterForEventValidation;
     EnableEventValidation属性是 .NET Framework 2.0 中是新增的属性,默认的情况下该属性的值为true;通过这个新增的功能ASP.NET会检查 POST方法中的所带的参数,如果认为不合法,就会抛出异常。这个设计的目的是为了防止恶意用户利用post 方法发送一些恶意数据,但是有时也会出现类似上面的错误。
只要禁止这个功能,问题就能得到解决。可以通过以下两种途径解决:
1、在Web.Config文件中:在标记中添加如下代码:

      

2、在具体的.aspx页面的源代码中修改代码,如下:
<%@ Page Language="C#" EnableEventValidation="false" AutoEventWireup="true" CodeFile="GridView_Export_Excel.aspx.cs" Inherits="GridView_Export_Excel" %>
请使用浏览器的分享功能分享到微信等