下面代碼實現將 GridView 導出到 Excel文件中。
值得注意的是VerifyRenderingInServerForm重載方法:
MSDN上的 VerifyRenderingInServerForm 方法的描述:
必須位于 <form runat=server> 標記中的控件可以在呈現之前調用此方法,以便在控件被置于標記外時顯示錯誤信息。發送回或依賴于注冊的腳本塊的控件應該在 Control.Render 方法的重寫中調用此方法。呈現服務器窗體元素的方式不同的頁可以重寫此方法以在不同的條件下引發異常。
如果回發或使用客戶端腳本的服務器控件沒有包含在 HtmlForm 服務器控件 (<form runat="server">) 標記中,它們將無法正常工作。這些控件可以在呈現時調用該方法,以在它們沒有包含在 HtmlForm 控件中時提供明確的錯誤信息。
開發自定義服務器控件時,通常在為任何類型的輸入標記重寫 Render 方法時調用該方法。這在輸入控件調用 GetPostBackEventReference 或發出客戶端腳本時尤其重要。復合服務器控件不需要作出此調用。
沒有這個方法,程序將報錯。
C# 代碼
<%
...
@?Page?Language
=
"
C#
"
?EnableEventValidation
=
"
false
"
?
%>
<!
DOCTYPE?html?PUBLIC?"-//W3C//DTD?XHTML?1.0?Transitional//EN"
?"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
>
<
script?
runat
="server"
>
...
??ICollection?CreateDataSource(?)

??
...
{
????System.Data.DataTable?dt?
=
?
new
?System.Data.DataTable();
????System.Data.DataRow?dr;
????dt.Columns.Add(
new
?System.Data.DataColumn(
"
id
"
,?
typeof
(Int32)));
????dt.Columns.Add(
new
?System.Data.DataColumn(
"
PkID
"
,?
typeof
(string)));
????dt.Columns.Add(
new
?System.Data.DataColumn(
"
Title
"
,?
typeof
(string)));
????
for
?(
int
?i?
=
?
0
;?i?
<
?
6
;?i
++
)

????
...
{
??????dr?
=
?dt.NewRow();
??????dr[
0
]?
=
?i;
??????dr[
1
]?
=
?
"
123456789123456789123456789
"
;
??????dr[
2
]?
=
?
"
<a?>歡迎光臨【孟憲會之精彩世界】</a>
"
;
??????dt.Rows.Add(dr);
????}
????System.Data.DataView?dv?
=
?
new
?System.Data.DataView(dt);
????
return
?dv;
??}
??protected?
void
?Page_Load(?object?sender,?EventArgs?e?)

??
...
{
????
if
?(
!
IsPostBack)

????
...
{
??????GridView1.BorderWidth?
=
?Unit.Pixel(
2
);
??????GridView1.BorderColor?
=
?System.Drawing.Color.DarkOrange;
??????GridView1.DataSource?
=
?CreateDataSource();
??????GridView1.DataBind();
????}
??}
??protected?
void
?Button1_Click(?object?sender,?System.EventArgs?e?)

??
...
{
????Response.Clear();
????Response.Buffer?
=
?
true
;
????Response.Charset?
=
?
"
GB2312
"
;
????Response.AppendHeader(
"
Content-Disposition
"
,?
"
attachment;filename=FileName.xls
"
);
????
//
?如果設置為?GetEncoding("GB2312");導出的文件將會出現亂碼?。?!
????Response.ContentEncoding?
=
?System.Text.Encoding.UTF7;
????Response.ContentType?
=
?
"
application/ms-excel
"
;
//
設置輸出文件類型為excel文件。?
????System.IO.StringWriter?oStringWriter?
=
?
new
?System.IO.StringWriter();
????System.Web.UI.HtmlTextWriter?oHtmlTextWriter?
=
?
new
?System.Web.UI.HtmlTextWriter(oStringWriter);
????
this
.GridView1.RenderControl(oHtmlTextWriter);
????Response.Output.Write(oStringWriter.ToString());
????Response.Flush();
????Response.End();

??}
??public?override?
void
?VerifyRenderingInServerForm(?Control?control?)

??
...
{?}
??protected?
void
?GridView1_RowDataBound(?object?sender,?GridViewRowEventArgs?e?)

??
...
{
????
if
?(e.Row.RowType?
==
?DataControlRowType.DataRow)

????
...
{
??????e.Row.Cells[
1
].Attributes.Add(
"
style
"
,?
"
vnd.ms-excel.numberformat:@;
"
);
????}
??}
</
script
>
<
html?
xmlns
="http://www.w3.org/1999/xhtml"
>
<
head?
runat
="server"
>
??
<
title
>
將?GridView?導出到?Excel?文件中
</
title
>
</
head
>
<
body
>
??
<
form?
id
="form1"
?runat
="server"
>
????
<
asp:GridView?
ID
="GridView1"
?runat
="server"
?OnRowDataBound
="GridView1_RowDataBound"
??????AutoGenerateColumns
="false"
>
??????
<
Columns
>
????????
<
asp:BoundField?
HeaderText
="序號"
?DataField
="id"
?
/>
????????
<
asp:BoundField?
HeaderText
="身份證號"
?DataField
="PkID"
?
/>
????????
<
asp:BoundField?
HeaderText
="網址"
?DataField
="Title"
?ReadOnly
="true"
?HtmlEncode
="false"
?
/>
??????
</
Columns
>
????
</
asp:GridView
>
????
<
asp:Literal?
ID
="HiddenOut"
?runat
="server"
?
/>
????
<
asp:Button?
ID
="Button1"
?runat
="server"
?Text
="導出"
?OnClick
="Button1_Click"
?
/>
??
</
form
>
</
body
>
</
html
>
VB.NET 代碼
<%
...
@?Page?Language
=
"
VB
"
?
%>
<!
DOCTYPE?html?PUBLIC?"-//W3C//DTD?XHTML?1.0?Transitional//EN"
?"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
>
<
script?
runat
="server"
>
...
Function?CreateDataSource()?As?ICollection?
?Dim?dt?As?System.Data.DataTable?
=
?New?System.Data.DataTable?
?Dim?dr?As?System.Data.DataRow?
?dt.Columns.Add(New?System.Data.DataColumn(
"
id
"
,?GetType(Int32)))?
?dt.Columns.Add(New?System.Data.DataColumn(
"
PkID
"
,?GetType(String)))?
?dt.Columns.Add(New?System.Data.DataColumn(
"
Title
"
,?GetType(String)))?
?Dim?i?As?Integer?
=
?
0
?
?While?i?
<
?
6
?
???dr?
=
?dt.NewRow?
???dr(
0
)?
=
?i?
???dr(
1
)?
=
?
"
123456789123456789123456789
"
?
???dr(
2
)?
=
?
"
<a?>歡迎光臨【孟憲會之精彩世界】</a>
"
?
???dt.Rows.Add(dr)?
???System.Math.Min(System.Threading.Interlocked.Increment(i),i
-
1
)?
?End?While?
?Dim?dv?As?System.Data.DataView?
=
?New?System.Data.DataView(dt)?
?Return?dv?
End?Function?

Protected?Sub?Page_Load(ByVal?sender?As?Object,?ByVal?e?As?EventArgs)?
?If?Not?IsPostBack?Then?
???GridView1.BorderWidth?
=
?Unit.Pixel(
2
)?
???GridView1.BorderColor?
=
?System.Drawing.Color.DarkOrange?
???GridView1.DataSource?
=
?CreateDataSource?
???GridView1.DataBind?
?End?If?
End?Sub?

Protected?Sub?Button1_Click(ByVal?sender?As?Object,?ByVal?e?As?System.EventArgs)?
?Response.Clear?
?Response.Buffer?
=
?True?
?Response.Charset?
=
?
"
GB2312
"
?
?Response.AppendHeader(
"
Content-Disposition
"
,?
"
attachment;filename=FileName.xls
"
)?
?Response.ContentEncoding?
=
?System.Text.Encoding.UTF7?
?Response.ContentType?
=
?
"
application/ms-excel
"
?
?Dim?oStringWriter?As?System.IO.StringWriter?
=
?New?System.IO.StringWriter?
?Dim?oHtmlTextWriter?As?System.Web.UI.HtmlTextWriter?
=
?New?System.Web.UI.HtmlTextWriter(oStringWriter)?
?Me.GridView1.RenderControl(oHtmlTextWriter)?
?Response.Output.Write(oStringWriter.ToString)?
?Response.Flush?
?Response.End?
End?Sub?

Public?Overloads?Overrides?Sub?VerifyRenderingInServerForm(ByVal?control?As?Control)?
End?Sub?

Protected?Sub?GridView1_RowDataBound(ByVal?sender?As?Object,?ByVal?e?As?GridViewRowEventArgs)?
?If?e.Row.RowType?
=
?DataControlRowType.DataRow?Then?
???e.Row.Cells(
1
).Attributes.Add(
"
style
"
,?
"
vnd.ms-excel.numberformat:@;
"
)?
?End?If?
End?Sub

</
script
>
<
html?
xmlns
="http://www.w3.org/1999/xhtml"
>
<
head?
id
="Head1"
?runat
="server"
>
??
<
title
>
將?GridView?導出到?Excel?文件中
</
title
>
</
head
>
<
body
>
??
<
form?
id
="form1"
?runat
="server"
>
????
<
asp:GridView?
ID
="GridView1"
?runat
="server"
?OnRowDataBound
="GridView1_RowDataBound"
??????AutoGenerateColumns
="false"
>
??????
<
Columns
>
????????
<
asp:BoundField?
HeaderText
="序號"
?DataField
="id"
?
/>
????????
<
asp:BoundField?
HeaderText
="身份證號"
?DataField
="PkID"
?
/>
????????
<
asp:BoundField?
HeaderText
="網址"
?DataField
="Title"
?ReadOnly
="true"
?HtmlEncode
="false"
?
/>
??????
</
Columns
>
????
</
asp:GridView
>
????
<
asp:Literal?
ID
="HiddenOut"
?runat
="server"
?
/>
????
<
asp:Button?
ID
="Button1"
?runat
="server"
?Text
="導出"
?OnClick
="Button1_Click"
?
/>
??
</
form
>
</
body
>
</
html
>