對於大量的數據,導出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對象。
- /// <summary>
- /// 導出Excel
- /// </summary>
- /// <param name="dt"></param>
- /// <param name="ExportFileName"></param>
- protected void ExcelExport(DataTable dt, string ExportFileName)
- {
- DataGrid dgExcel = new DataGrid();
- dgExcel.DataSource = dt;
- dgExcel.DataBind();
- HttpContext.Current.Response.Charset = "GB2312";
- string fileName = HttpUtility.UrlEncode(ExportFileName, System.Text.Encoding.UTF8);
- string str="attachment;filename="+fileName+".xls";
- HttpContext .Current .Response .ContentEncoding =System.Text.Encoding .UTF7;
- HttpContext.Current.Response .ContentType ="application/ms-excel";
- HttpContext .Current .Response .AppendHeader ("content-disposition",str);
- StringWriter sw = new StringWriter();
- HtmlTextWriter htmTextWriter = new HtmlTextWriter(sw);
- dgExcel .RenderControl(htmTextWriter );
- Response .Write(sw);
- Response .End();
- }
- /// <summary>
- /// 導出excel按鈕
- /// </summary>
- /// <param name="sender"></param>
- /// <param name="e"></param>
- protected void btnExport_Click(object sender, EventArgs e)
- {
- DataTable dt = new SelectClassRoomManager().SelectClassRoomByTypeBuildNo(ddlClassType.SelectedValue, ddlBuildingID.SelectedValue);
- if (dt.Rows.Count == 0)
- Response.Write("<script>alert('沒有數據,沒有必要導出啊哈');</script>");
- else
- {
- //導出excel
- ExcelExport(dt, "教室");
- }
- }
其中用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如下: