星期日, 7月 12, 2009

GridView匯出至Excel(GridView Export To Excel)


參考文章:
export to excel from dataview
在CodeFile中取得控制項將輸出Clinet端的HTML內容
Solving GridView Export Paging Problems
解決GridView使用RenderControl取得HTML出現的問題
KB-About Event Validation of ASP.NET 2.0




方法一:


protected void Button1_Click(object sender, EventArgs e)
{
Response.Clear();
Response.AddHeader("content-disposition", "attachment; filename=FileName1.xls");
Response.Charset = "";
Response.ContentType = "application/vnd.xls";
System.IO.StringWriter stringWrite = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter htmlWrite =
new HtmlTextWriter(stringWrite);
GridView g = new GridView();
g.DataSource = SqlDataSource1;
g.DataBind();
g.RenderControl(htmlWrite);
Response.Write(stringWrite.ToString());
Response.End();

}


方法二:

public override void VerifyRenderingInServerForm(Control control)
{

// Confirms that an HtmlForm control is rendered for
//the specified ASP.NET server control at run time.
//不加會有型別 'GridView' 的控制項 'GridView1' 必須置於有 runat=server 的表單標記之中的錯誤發生。
}

protected void ExporToExcel(object sender, EventArgs e)
{
Response.Clear();

Response.AddHeader("content-disposition",
"attachment;filename=sdf.xls");

Response.Charset = "";

// If you want the option to open the Excel file without saving than

// comment out the line below

// Response.Cache.SetCacheability(HttpCacheability.NoCache);

Response.ContentType = "application/vnd.xls";

System.IO.StringWriter stringWrite = new System.IO.StringWriter();

System.Web.UI.HtmlTextWriter htmlWrite =
new HtmlTextWriter(stringWrite);

// turn off paging & sorting
GridView1.AllowPaging = false;
GridView1.AllowSorting = false;
GridView1.DataBind();

GridView1.RenderControl(htmlWrite);
Response.Write(stringWrite.ToString());
Response.End();

// turn the paging on again
GridView1.AllowPaging = true;
GridView1.AllowSorting = true;
GridView1.DataBind();

}

如果GridView的分頁如排序無事前關閉再匯出,會發生
RegisterForEventValidation 只能在 Render(); 期間呼叫
的錯誤發生,解決方法有2種

1、請在html加上EnableEventValidation="false"修改如下
<%@ Page Language="C#" EnableEventValidation="false" AutoEventWireup="true" CodeFile="1003.aspx.cs" Inherits="_1003_1003" %>(儘量別用此方法,原因點我)

2、

// turn off paging & sorting
//匯出前先將排序與分頁關閉
GridView1.AllowPaging = false;
GridView1.AllowSorting = false;
GridView1.DataBind();

GridView1.RenderControl(htmlWrite);
Response.Write(stringWrite.ToString());
Response.End();

// turn the paging on again
//匯出後再將排序與分頁開啟
GridView1.AllowPaging = true;
GridView1.AllowSorting = true;
GridView1.DataBind();

沒有留言:

Analytics