如果想要在頁面上把顯示出來的gridview當做報表輸出為excel,
//***********************************************************************
//匯出成Excel
protected void btnExcelReport_Click(object sender, EventArgs e)
{
System.IO.StringWriter tw = new System.IO.StringWriter();
HtmlTextWriter hw = new HtmlTextWriter(tw);
string excelFileName = "輸出檔名.xls";

Context.Response.ContentType = "application/x-excel";
Context.Response.AddHeader("content-disposition", "attachment;filename=" + Server.UrlEncode(excelFileName));

//若想要輸出自訂文字,在這邊加,使用html語法即可
string query = "";
Context.Response.Write(query);
//********************************
this.GridView1.RenderControl(hw);
Context.Response.Write(tw.ToString());
Context.Response.End();
}
public override void VerifyRenderingInServerForm(Control control)
{
//避免「型別 xxx 的控制項 xxx 必須置於有 runat=server 的表單標記之中。」的問題
}
//***********************************************************************

就可以將想要的control內容輸出成excel

不過在今天遇到了新的問題,我的電腦可以使用但是到別人電腦上則會出現問題:
Sys.WebForms.PageRequestManagerParserErrorException: The message received from the server could not parsed.
Common causes for this error are when the response is modified by calls to Response.Write(), response filters, HttpModules, or server trace is enabled.
網路上找了很久終於找到解決辦法
問題原因是在AJAX 的通訊中不能使用 Response.Write() 來輸出資料
解決辦法為:
把要輸出Excel那個按鈕設定成updatepanel中triggers的postbacktrigger就可以了
來源:https://forums.microsoft.com/MSDN-CHT/ShowPost.aspx?PostID=2905964&SiteID=14
所以呢,在按鈕處在的updatepanel中加入trigger:
<Triggers><asp:PostBackTrigger ControlID="button1" /></Triggers>
使用整頁回傳即可解決此問題.
arrow
arrow
    全站熱搜

    pikachumk2 發表在 痞客邦 留言(2) 人氣()