Asp.net導出Excel(二)

      對於大量的數據,導出Excel的方式。
     上篇博客介紹了導出Excel一種方式:通過DataTable
      這篇博客,介紹另一中導出Excel方式-通過DataGrid.
 
      導出Excel的過程:
      雖然這次是通過DataGrid導出Excel,但是不是從界面上DataGrid控件導出Excel。因爲這次實際項目中的需求是把查詢到的信息導出Excel,界面上的DataGrid控件只顯示一部分,也就是正如上篇博客中提到控件實現了分頁,所以不可以直接從界面控件導出。
      但是實現的過程一樣,只不過,這次DataGrid是動態生成的。
       
      此導出過程用到StringWriter類(將文本信息寫入字符串),HtmlTextWriter類:將標記字符和文本寫入到 ASP.NET 服務器控件輸出流。(命名空間:System.Web.UI)
      Control.RenderControl (HtmlTextWriter) ——將服務器控件的內容輸出到所提供的 HtmlTextWriter 對象中。
     然後respose輸出StringWriter對象。
   

  1. /// <summary>  
  2.    /// 導出Excel  
  3.    /// </summary>  
  4.    /// <param name="dt"></param>  
  5.    /// <param name="ExportFileName"></param>  
  6.    protected void ExcelExport(DataTable dt, string ExportFileName)  
  7.    {  
  8.        DataGrid dgExcel = new DataGrid();  
  9.        dgExcel.DataSource = dt;  
  10.        dgExcel.DataBind();  
  11.   
  12.        HttpContext.Current.Response.Charset = "GB2312";  
  13.        string fileName = HttpUtility.UrlEncode(ExportFileName, System.Text.Encoding.UTF8);  
  14.        string str="attachment;filename="+fileName+".xls";  
  15.        HttpContext .Current .Response .ContentEncoding =System.Text.Encoding .UTF7;  
  16.        HttpContext.Current.Response .ContentType ="application/ms-excel";  
  17.        HttpContext .Current .Response .AppendHeader ("content-disposition",str);  
  18.   
  19.         StringWriter sw = new StringWriter();  
  20.        HtmlTextWriter htmTextWriter = new HtmlTextWriter(sw);  
  21.        dgExcel .RenderControl(htmTextWriter );  
  22.        Response .Write(sw);  
  23.        Response .End();  
  24.   
  25.    }  
  1. /// <summary>  
  2.     /// 導出excel按鈕  
  3.     /// </summary>  
  4.     /// <param name="sender"></param>  
  5.     /// <param name="e"></param>  
  6.     protected void btnExport_Click(object sender, EventArgs e)  
  7.     {  
  8.         DataTable dt = new SelectClassRoomManager().SelectClassRoomByTypeBuildNo(ddlClassType.SelectedValue, ddlBuildingID.SelectedValue);  
  9.         if (dt.Rows.Count == 0)  
  10.             Response.Write("<script>alert('沒有數據,沒有必要導出啊哈');</script>");  
  11.         else  
  12.         {  
  13.               
  14.             //導出excel  
  15.             ExcelExport(dt, "教室");  
  16.         }  
  17.     }  


   其中用DataGrid導出Excel的時候,其導出的文件名編碼:

    string fileName = HttpUtility.UrlEncode(ExportFileName, System.Text.Encoding.UTF8);

    其導出的當前文件編碼:

      HttpContext .Current .Response .ContentEncoding =System.Text.Encoding .UTF7;

 

   但是這兩種導出的Excel的文件不同,內容是一樣的,但是其格式不同,使用上篇博客DataTable導出Excel,是真正的excel,而使用DataGrid導出的Excel,貌似有點類似記事本。還是貼的圖,大家看看吧。

     DataTable導出的Excel 如下:

   

      而DataGrid導出的Excel如下:

      

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章