Gridview導出Excel方法

方法一:

前臺:
<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 控件時,該控件可以呼叫這個方法來呈現清楚的錯誤訊息。
   

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章