Asp.net - 查詢結果匯出為Excel檔小密技‏

Asp.net - 查詢結果匯出為Excel檔小密技


資料來源:http://edu.uuu.com.tw/data_article/article/100510tips.htm  感謝恆毅資訊提供
作  者:趙敏翔 精誠資訊 恆逸教育訓練中心資深講師
技術分類:程式設計

開發ASP.NET時常擷取資料庫的資料,除了可以顯示在網頁上使用,大部分的使用者也有需求想要將網頁上的查詢結果保存下來,因此可以將GridView的內容直接轉成Excel檔。
但是在撰寫轉檔設計的時候,是有一些設計的地方必須要注意的,不然執行時還是會出錯。 接下來亞當斯要介紹的是:將匯出Excel檔的函式封裝在元件中,以方便ASP.NET應用程式可以共用,這樣的設計方式,就必須在網頁上動些小手腳。
以下為簡易的設計步驟(這邊用VB來寫範例,需要C#的朋友就自己轉):
1. 首先,新增一個類別,命名為:ExportUtil.cs
2. 將匯出Excel的函式寫在ExportUtil中或是一個類別函式庫(Class Library)中,這個ExportGridView方法接收兩個參數,分別是檔案名稱以及GridView物件,並且宣告為靜態方法:static
  1. public class ExportUtil
  2. {
  3.     ///
  4.     /// 將ASP.NET查詢結果(GridView)匯出為Excel檔
  5.     ///
  6.     /// Excel檔的檔案名稱
  7.     /// 想要匯出的GridView資料
  8.     ///
  9.     public static void ExportGridView(string filename, GridView gv)
  10.     {
  11.         HttpContext.Current.Response.Clear();
  12.         HttpContext.Current.Response.Write("");
  13.         HttpContext.Current.Response.AddHeader("content-disposition", "attachment;filename=" + HttpContext.Current.Server.UrlEncode(filename));
  14.        
  15.         HttpContext.Current.Response.Charset = "";
  16.         HttpContext.Current.Response.ContentType = "application/vnd.ms-excel";
  17.         System.IO.StringWriter StringWriter = new System.IO.StringWriter();
  18.         HtmlTextWriter HtmlTextWriter = new HtmlTextWriter(StringWriter);
  19.         gv.AllowSorting = false;
  20.         gv.AllowPaging = false;
  21.         gv.RenderControl(HtmlTextWriter);
  22.         HttpContext.Current.Response.Write(StringWriter.ToString());
  23.         HttpContext.Current.Response.End();
  24.     }
  25. }
3. 因為GridView物件必須置於有 runat=server 的表單標記之中,所以請在ASP.NET網頁程式碼中,加入以下這段程式(AJAX也適用):
  1. public override void VerifyRenderingInServerForm(Control control)
  2. {
  3.     //處理'GridView' 的控制項 'GridView' 必須置於有 runat=server 的表單標記之中
  4. }
4. 在.aspx網頁上,就可以執行叫用程式碼:
  1. ExportUtil.ExportGridView("Customer.xls", GridView1)
5. 在ASP.NET網頁中先取資料,將結果放置到GridView控制項中,然後可以設計一個按鈕控制項,當按下按鈕後去叫用ExportGridView方法,就可以將資料匯出到Excel中。
※ 不過如果你的GridView控制項有設定分頁或是排序的話,此時還是會產生錯誤,解決方式就是可以在web.config中設定enableEventValidation

張貼留言

0 留言