GridView匯入至EXCEL

iDotNetSpace發表於2009-07-10
  1. //注:在.aspx檔案中第一行中加入EnableEventValidation="false"   
  2. "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 += "
  19. \" mce_style="\""font-weight: bold; white-space: nowrap;\">";   
  20.       for (i = 0; i 
  21.       {   
  22.           colHeaders += "
  23. ";   
  24.       }   
  25.       colHeaders += "
  26. ";   
  27.       resp.Write(colHeaders);   
  28.       //逐行處理資料   
  29.       foreach (DataRow row in myRow)   
  30.       {   
  31.           Is_item += "
  32. ";   
  33.           //在當前行中,逐列取得資料,資料之間以\t分割,結束時加回車符\n   
  34.           for (i = 0; i 
  35.           {   
  36.               if (dt.Columns[i].ColumnName.Equals("銀行帳號") || dt.Columns[i].ColumnName.Equals("身份證號"))   
  37.                   Is_item += "
  38. ";   
  39.               else  
  40.                   Is_item += "
  41. ";   
  42.           }   
  43.           Is_item += "
  44. ";   
  45.           resp.Write(Is_item);   
  46.           Is_item = "";   
  47.       }   
  48.       resp.Write("
  49. " + dt.Columns[i].Caption.ToString() + "
    \" mce_style="\""vnd.ms-excel.numberformat:@\">" + row[i].ToString() + "" + row[i].ToString() + "
    "
    );   
  50.       //寫緩衝區中的資料到HTTP標頭檔案中   
  51.       resp.End();   
  52.   }  
在實現"將GridView中的資料匯出到Excel中"的時候出現瞭如下錯誤:
使用者程式碼未處理 InvalidOperationException 
只能在執行 Render() 的過程中呼叫 RegisterForEventValidation;
     EnableEventValidation屬性是 .NET Framework 2.0 中是新增的屬性,預設的情況下該屬性的值為true;通過這個新增的功能ASP.NET會檢查 POST方法中的所帶的引數,如果認為不合法,就會丟擲異常。這個設計的目的是為了防止惡意使用者利用post 方法傳送一些惡意資料,但是有時也會出現類似上面的錯誤。
只要禁止這個功能,問題就能得到解決。可以通過以下兩種途徑解決:
1、在Web.Config檔案中:在標記中新增如下程式碼:

      

2、在具體的.aspx頁面的原始碼中修改程式碼,如下:
 EnableEventValidation="false" AutoEventWireup="true" CodeFile="GridView_Export_Excel.aspx.cs" Inherits="GridView_Export_Excel" %>

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-608859/,如需轉載,請註明出處,否則將追究法律責任。

相關文章