下面代碼實(shí)現(xiàn)將 gridview 導(dǎo)出到 excel文件中。
值得注意的是verifyrenderinginserverform重載方法:
msdn上的 verifyrenderinginserverform 方法的描述:
必須位于 <form runat=server> 標(biāo)記中的控件可以在呈現(xiàn)之前調(diào)用此方法,以便在控件被置于標(biāo)記外時(shí)顯示錯(cuò)誤信息。發(fā)送回或依賴于注冊的腳本塊的控件應(yīng)該在 control.render 方法的重寫中調(diào)用此方法。呈現(xiàn)服務(wù)器窗體元素的方式不同的頁可以重寫此方法以在不同的條件下引發(fā)異常。
如果回發(fā)或使用客戶端腳本的服務(wù)器控件沒有包含在 htmlform 服務(wù)器控件 (<form runat="server">) 標(biāo)記中,它們將無法正常工作。這些控件可以在呈現(xiàn)時(shí)調(diào)用該方法,以在它們沒有包含在 htmlform 控件中時(shí)提供明確的錯(cuò)誤信息。
開發(fā)自定義服務(wù)器控件時(shí),通常在為任何類型的輸入標(biāo)記重寫 render 方法時(shí)調(diào)用該方法。這在輸入控件調(diào)用getpostbackeventreference 或發(fā)出客戶端腳本時(shí)尤其重要。復(fù)合服務(wù)器控件不需要作出此調(diào)用。
沒有這個(gè)方法,程序?qū)?bào)錯(cuò)。
c# 代碼
<%[email protected] 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");
// 如果設(shè)置為 getencoding("gb2312");導(dǎo)出的文件將會出現(xiàn)亂碼!??!
response.contentencoding = system.text.encoding.utf7;
response.contenttype = "application/ms-excel";//設(shè)置輸出文件類型為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 導(dǎo)出到 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="網(wǎng)址" datafield="title" readonly="true" htmlencode="false" />
</columns>
</asp:gridview>
<asp:literal id="hiddenout" runat="server" />
<asp:button id="button1" runat="server" text="導(dǎo)出" onclick="button1_click" />
</form>
</body>
</html>
新聞熱點(diǎn)
疑難解答
圖片精選