GridView RenderControl (Execl sample)

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