方法一:
前臺:
<asp:Button ID="btnExcel" runat="server" Text="導出Excel" />
後臺:
protected void Button1_Click(object sender, EventArgs e)
{
toExecl(GridView1);
}
// 將GridView數據導出到EXECL
private void toExecl(System.Web.UI.WebControls.GridView gv)
{
Response.Clear();
Response.Buffer = true;
Response.Charset = "GB2312";
Response.AppendHeader("Content-Disposition", "attachment;filename=FileName.xls"); //這裏的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)
{
//這個方法不能刪除掉
}
注:VerifyRenderingInServerForm方法不能刪掉,否則出現
類型“GridView”的控件“ctl00_ContentPlaceHolder1_GridView1”必須放在具有 runat=server 的窗體標記內
如果出現下面的情況
只能在執行 Render() 的過程中調用 RegisterForEventValidation;
在導出頁中
<%@ Page Language="C#" MasterPageFile="~/MasterPage2.master" EnableEventValidation="false" AutoEventWireup="true" CodeFile="search0.aspx.cs" Inherits="search" Title="竹林風-" %>
-------------------------------------------------------------------------------------
方法二:
protected void btnExportToExcel_Click(object sender, EventArgs e)
{
System.IO.StringWriter tw = new System.IO.StringWriter();
HtmlTextWriter hw = new HtmlTextWriter(tw);
string excelFileName = "MyExcel.xls";
Context.Response.ContentType = "application/x-excel";
Context.Response.AddHeader("content-disposition", "attachment;filename=" + Server.UrlEncode(excelFileName));
GridView1.RenderControl(hw);
Context.Response.Write(tw.ToString());
Context.Response.End();
}
public override void VerifyRenderingInServerForm(System.Web.UI.Control control)
{
//處理「型別 'GridView' 的控件 'GridView1' 必須置於有 runat=server 的窗體標記之中。」錯誤訊息
// 如果要限制控件必須位於 <form runat=server> 標記以內,則請先呼叫這個方法,
// 才進行呈現,如此一來,如果控件位在標記以外,便會顯示錯誤訊息。
// 會回傳或是依賴已註冊指令碼區塊的控件,應該呼叫這個方法來覆寫 Control.Render 方法。
// 對於服務器窗體項目有不同呈現方法的網頁,可以覆寫這個方法以便在不同條件下擲回例外狀況。
// 會回傳或使用客戶端指令碼的服務器控件,
// 如果未放在 HtmlForm 服務器控件 (<form runat="server">) 標記之內,將無法運作。'
// 當它們未被封入 HtmlForm 控件時,該控件可以呼叫這個方法來呈現清楚的錯誤訊息。