如果想要在頁面上把顯示出來的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>
使用整頁回傳即可解決此問題.
文章標籤
全站熱搜

請問,我們在輸出成EXCEL檔時,因該檔有頭首(公司的LOGO之類的),若遇到分頁列印的話第二頁後要怎麼做才可以保留頁首呢? 謝謝
要不要試試看在輸出的時候插入自訂的頁首? 剛剛試了一下用Reporting Services輸出EXCEL格式好像也沒辦法自動保留頁首... 還是要試試看不用Grid,自己畫table 然後在到換頁的行數 用迴圈加入頁首 或者是直接使用Reporting Services產生報表 這樣就可以使用頁首頁尾了 是不是有其他正式的解法可能要另求高手或找辜狗大了~ 不好意思可能幫不太得上忙 >_<
我的頁面有 UpdatePanel 控制項 ,不過匯出 EXCEL的按鈕 並沒有包在 UpdatePanel 裡面,會發生你上面說的錯誤,但是 在 UpdatePanel 裡面加了
也就可以匯出了 ~~
PS... 好奇的是我另外的 匯出頁面 跟上述設計一樣,但是沒有加
都可以匯出說 ~~