匯出到Excel方法:
public void ExportToExcel(GridView gridView) { gridView.AllowPaging = false;//禁用分頁,將資料全部匯出到EXCEL Response.Clear(); Response.Buffer = true; Response.Charset = "gb2312"; Response.AddHeader("Content-Disposition", "attachment; filename=" + System.Web.HttpUtility.UrlEncode(DateTime.Now.ToLongDateString()+DateTime.Now.ToLongTimeString(), System.Text.Encoding.UTF8) + ".xls"); Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");//設定輸出資料流為簡體中文 Response.Write("<meta http-equiv=Content-Type content=text/html;charset=gb2312>"); Response.ContentType = "application/vnd.ms-excel";//設定輸出檔案類型為excel檔案。 this.EnableViewState = false; System.Globalization.CultureInfo myCItrad = new System.Globalization.CultureInfo("ZH-CN", true); System.IO.StringWriter oStringWriter = new System.IO.StringWriter(myCItrad); System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter); //這裡需要重新綁定資料來源 this.BindgridView(); //綁定資料來源的函數 gridView.RenderControl(oHtmlTextWriter); Response.Write(oStringWriter.ToString()); Response.End(); }
如上代碼如果處理一般的GridView匯出應該是沒有問題的,但是如果GridView的AutoGenerateDeleteButton,AutoGenerateEditButton,AutoGenerateSelectButton有的設定為True了,或者GridView中有HyperLinkField類型的欄位,那麼就會拋出形如“類型“GridView”的控制項“XXXX”必須放在具有 runat=server 的表單標記內。”的異常!
那麼他的解決方案是:對WebForm表單的VerifyRenderingInServerForm方法進行Override!
代碼如下:
public override void VerifyRenderingInServerForm(Control control){ //OverRide 為了使匯出成Excel可行!}
處理亂碼的代碼:
Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");//設定輸出資料流為簡體中文 Response.Write("<meta http-equiv=Content-Type content=text/html;charset=gb2312>");