日前因工作上的要求,得在不能動到前端的配置下, 直接由後端完成輸出報表
上網查詢相關資料,終於寫出下面這方法
需要引用參考 Microsoft.ReportViewer.WinForms, System.Windows.Forms
//方法上要傳入的參數
*報表檔案路徑 StrPath
ex: string StrPath = Path.Combine(Server.MapPath("./"), "Report/PDF.rdlc");
*報表檔中資料來源的名稱 StrDataTableName
重要: 名稱一定要命名和報表頁面上的資料集名稱一樣,不然會出錯
*要報表輸出的資料(DataTable) DTData
*傳遞報表參數 Dictionary<string,string>
這邊我是先將(參數組)放到 Dictionary 集合中, 在方法中會再解析出來
ex: Dictionary<string,string> Dict1 =new Dictionary<string,string>();
//key:參數名稱, value:參數值
Dict1.Add("參數1", "值1");
Dict1.Add("參數2", "值2");
*報表輸出格式 StrPrtType
支援 "Excel"、"PDF"、"Word" 和 "Image"
private void RenderReport(string StrPath, string StrDataTableName, DataTable DTData, Dictionary<string,string> DicParam, string StrPrtType)
{
//宣告本機報表物件
LocalReport LRpt1= new LocalReport();
//設定報表檔案路徑
LRpt1.ReportPath = StrPath;
//加入報表資料來源
LRpt1.DataSources.Add(new ReportDataSource(StrDataTableName, DTData));
//報表上是否能輸出影像
LRpt1.EnableExternalImages = true;
//傳遞報表參數
ReportParameter[] RParam = new ReportParameter[DicParam.Count];
int i = 0;
foreach (KeyValuePair<string,string> element in DicParam)
{
RParam[i] = new ReportParameter(element.Key, element.Value);
i++;
}
LRpt1.SetParameters(RParam);
//Render (out 參數)
string StrMime = ""; //(報表的 MIME 類型 ex:如果輸出為PDF,則會傳回 "application/pdf")
string StrEncode = "";
string StrExten= ""; //(輸出檔所用的副檔名 ex 如果輸出為PDF,則會傳回 "pdf")
string[] StrStreamArray;
Warning[] OWar; //(紀錄 產生報表時發生的錯誤訊息)
//產生的位元組陣列
byte[] ByteArray = LRpt1.Render(StrPrtType, null, out StrMime, out StrEncode, out StrExten, out StrStreamArray, out OWar);
//設定輸出的資料流 Http MIME 類型 (ex: "application/pdf")
HttpContext.Current.Response.ContentType = StrMime;
//HTML <head>
//設定輸出的檔案名稱
string FileName = "File." + StrExten;
HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename="+ FileName);
//設定以 位元組陣列 表示的請求的長度(指的是<body>要輸出的長度)
HttpContext.Current.Response.AddHeader("Content-Length", ByteArray.Length.ToString());
//開始輸出到<body>的位元組陣列
HttpContext.Current.Response.BinaryWrite(ByteArray);
HttpContext.Current.Response.End();
}
參考:
http://dotnetsoldier.blogspot.com/2008/12/generate-pdf-from-local-report.html
沒有留言:
張貼留言