從Infragistics UltraWebGrid 導出數據到Excel續

 剛寫完一篇關於從Infragistics UltraWebGrid 導出數據到Excel的文章,在孟子E章那看到一篇關於ASP.NET 2.0中將GridView 導出到Excel文件中的文章。受其啓發,發現從Infragistics UltraWebGrid 導出數據到Excel中也可以用類似的方法實現。

這種方法的好處是:速度快;能夠將Infragistics UltraWebGrid 在網頁上顯示的樣式也導出到Excel中;

這種方法的不足是:如果Infragistics UltraWebGrid 中有隱藏的行或列的話,會將這些隱藏的信息也導出來。

下面是這種方法實現的代碼:

protected void ButtonExport_Click(object sender, 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.UltraWebGrid1.RenderControl(oHtmlTextWriter);
        Response.Output.Write(oStringWriter.ToString());
        Response.Flush();
        Response.End();
    }

注意,在頁面對應的導出按鈕的單擊事件中加入以上代碼後,還需要在該頁面的代碼中加入以下的代碼,否則會出現錯誤:

public override void VerifyRenderingInServerForm(Control control)
    
{ }

在孟子E章的文章中是如下解釋加這些代碼的原因:

值得注意的是VerifyRenderingInServerForm重載方法:

MSDN上的 VerifyRenderingInServerForm 方法的描述:

  必須位於 <form runat=server> 標記中的控件可以在呈現之前調用此方法,以便在控件被置於標記外時顯示錯誤信息。發送回或依賴於註冊的腳本塊的控件應該在 Control.Render 方法的重寫中調用此方法。呈現服務器窗體元素的方式不同的頁可以重寫此方法以在不同的條件下引發異常。

  如果回發或使用客戶端腳本的服務器控件沒有包含在 HtmlForm 服務器控件 (<form runat="server">) 標記中,它們將無法正常工作。這些控件可以在呈現時調用該方法,以在它們沒有包含在 HtmlForm 控件中時提供明確的錯誤信息。

  開發自定義服務器控件時,通常在爲任何類型的輸入標記重寫 Render 方法時調用該方法。這在輸入控件調用 GetPostBackEventReference 或發出客戶端腳本時尤其重要。複合服務器控件不需要作出此調用。

沒有這個方法,程序將報錯。

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