[C#]透過ReportViewer將報表另存成檔案

[SQL Server]透過ReportViewer將報表另存成檔案

以Reporting Service作為系統的報表方案的各位應該都會有需要將報表轉成實體檔的機會,在面的文章中我們有看到可以直接在Report操作畫面上進行報表匯出的動作,但這樣的動作畢竟需要開啟報表檔,再按下匯出,如果今天我們希望程式執行到一半,可以自動將報表轉成檔案後匯出到Client端,又或者當成Mail的附件直接寄送給主管當成週報表或者月報表的參考資料,豈不方便的多。

Reporting Service的報表佈署有兩種,一種是佈署到ReportServer上,可享有ReportServer的報表管理與安全性機制;另一種就是佈署在我們站台下,直接透過ReportViewer指定好報表檔與資料來源,在網頁上做呈現,本身不具備報表管理的功能,不過這種方式對網站的佈署較為簡便,因為可連同網站一起佈署。

本文主要先提ReportViewer如何指定好rdlc與資料來源後,將報表丟到Client去,我們看以下很簡單的Code:

 


/// <summary>
/// 呼叫此function將rdlc檔賦予資料後進行匯出
/// </summary>
/// <param name="pType">支援PDF、Excel、Image等格式</param>
public void ExportReport(string pType)
{

    //取得資料
    DBCommand tCommand = new DBCommand(@"server=gipi;database=TEST;uid=sa;pwd=sa");
    DataTable tDt = tCommand.Query("Select * from TestTable");
    //清除資料來源
    ReportViewer1.LocalReport.DataSources.Clear();
    //指定報表檔路徑
    ReportViewer1.LocalReport.ReportPath = "Report1.rdlc";
    //設定資料來源
    ReportViewer1.LocalReport.DataSources.Add(new Microsoft.Reporting.WebForms.ReportDataSource("MyData", tDt));
    ReportViewer1.LocalReport.Refresh();

    Microsoft.Reporting.WebForms.Warning[] tWarnings;
    string[] tStreamids;
    string tMimeType;
    string tEncoding;
    string tExtension;

    //呼叫ReportViewer.LoadReport的Render function,將資料轉成想要轉換的格式,並產生成Byte資料
    byte[] tBytes = ReportViewer1.LocalReport.Render(pType, null, out tMimeType, out tEncoding, out tExtension, out tStreamids, out tWarnings);

    //將Byte內容寫到Client
    Response.Clear();
    Response.ContentType = tMimeType;
    Response.AppendHeader("Content-Disposition", String.Format("attachment; filename=report.{0}", tExtension));
    Response.BinaryWrite(tBytes);
    Response.End();
} 

游舒帆 (gipi)

探索原力Co-founder,曾任TutorABC協理與鼎新電腦總監,並曾獲選兩屆微軟最有價值專家 ( MVP ),離開職場後創辦探索原力,致力於協助青少年培養面對未來的能力。認為教育與組織育才其實息息相關,都是在為未來儲備能量,2018年起成立為期一年的專題課程《職涯躍升的關鍵24堂課》,為培養台灣未來的領袖而努力。