GridView Control RenderControl To Execl
使用RenderControl 可以輕鬆匯出Execl
protected void Report_Click(object sender, EventArgs e)
{
PermissionLinkButton plbtnReport = sender as PermissionLinkButton;
if (plbtnReport != null && !String.IsNullOrEmpty(plbtnReport.CommandArgument))
{
Response.Clear();
Response.Buffer = true;
Response.AddHeader("content-disposition", "attachment;filename=finance.xls");
Response.Charset = "";
Response.ContentType = "application/vnd.ms-excel";
System.IO.StringWriter stringWrite = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);
this.GridView1.RenderControl(htmlWrite);
Response.Write(stringWrite.ToString());
Response.End();
}
}
發生問題
型別 'GridView' 的控制項 'ContentPlaceHolder_Content_GridView1' 必須置於有 runat=server 的表單標記之中。
解決 複寫 VerifyRenderingInServerForm
public override void VerifyRenderingInServerForm(Control control)
{
//base.VerifyRenderingInServerForm(control);
}
若有runat="server"動作的 Action,排序、換頁等,需將屬性設為false
RegisterForEventValidation 只能在 Render(); 期間呼叫
若發生上面錯誤,可以硬解
可以設定aspx原始檔中<%Page%>的以下兩個設定解決
EnableEventValidation = "false" AutoEventWireup="true"
來源:http://stackoverflow.com/questions/438184/export-to-excel-from-a-repeater
來源:http://www.dotblogs.com.tw/topcat/archive/2008/03/14/1336.aspx