[转]RDLC报表-参数传递及主从报表
本文轉自:http://www.cnblogs.com/yjmyzz/archive/2011/09/19/2180940.html
今天繼續(xù)學習RDLC報表的“參數(shù)傳遞”及“主從報表”
一、先創(chuàng)建DataSet,如下圖:
二、創(chuàng)建一個報表rptDEPT.rdlc,顯示部門T_DPET的數(shù)據(jù)
三、嵌入Default.aspx中,寫在Default.aspx.cs中寫些基本代碼
View Code?| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | using System; using System.Data; using Microsoft.Reporting.WebForms; namespace ReportSample { ??? public partial class Default : System.Web.UI.Page ??? { ??????? protected void Page_Load(object sender, EventArgs e) ??????? { ??????????? if (!IsPostBack) ??????????? { ??????????????? this.ReportViewer1.LocalReport.ReportPath = "rptDEPT.rdlc"; ??????????????? this.ReportViewer1.LocalReport.DataSources.Add(new ReportDataSource("DS_DEPT", GetDeptData())); ??????????? } ??????? } ??????? DataTable GetDeptData() ??????? { ??????????? DataTable dt = new DataTable(); ??????????? dt.Columns.Add("DEPTNO", typeof(string)); ??????????? dt.Columns.Add("DEPTNAME", typeof(string)); ??????????? dt.Rows.Add("01", "辦公室"); ??????????? dt.Rows.Add("02", "技術部"); ??????????? dt.Rows.Add("03", "銷售部"); ??????????? dt.Rows.Add("04", "客服部"); ??????????? return dt;???????????????? ??????? } ??????? ??? } } |
運行效果:
OK,下面才是真正開始:
很多情況下(比如團隊開發(fā)),報表的數(shù)據(jù)源DataTable通常是由其它人寫好的,有些甚至不允許再做修改,報表開發(fā)人員只能被動的接收數(shù)據(jù),但是報表上未必需要顯示全部數(shù)據(jù),以上面的報表為例,如果我們只需要顯示"02技術部“的數(shù)據(jù),如何處理?
這時報表參數(shù)就派上用場了:
四、添加報表參數(shù)
在Report Data面板中,選中Parameters,右擊-->Add Parameter
為參數(shù)取名為DeptNo,并做一些設置,如下圖
五、為報表的Table添加Filters條件
上一步添加的參數(shù)需要與報表上的Table建立聯(lián)系,否則發(fā)揮不了作用。幸好每個Table都可以設置Filters表達式,來對數(shù)據(jù)進行篩選,見下圖:
六、在cs代碼中動態(tài)傳入參數(shù)
修改Default.aspx.cs的代碼,在運行時動態(tài)添加參數(shù)
View Code?| 1 2 3 4 5 6 7 8 9 10 | protected void Page_Load(object sender, EventArgs e) { ??? if (!IsPostBack) ??? { ??????? this.ReportViewer1.LocalReport.ReportPath = "rptDEPT.rdlc";??????????????? ??????? this.ReportViewer1.LocalReport.DataSources.Add(new ReportDataSource("DS_DEPT", GetDeptData())); ??????? //動態(tài)傳入參數(shù) ??????? this.ReportViewer1.LocalReport.SetParameters(new ReportParameter("DeptNo", "02")); ??? } } |
最終運行結果:
很多報表中,數(shù)據(jù)的來源往往不止一個DataTable,下面我們模擬一個簡單的主從報表,主報表即為上面的rptDEPT(顯示部門信息),子報表(也稱從報表)顯示部門下的員工清單(命名為rptEMP.rdlc)
七、創(chuàng)建員工報表rptEMP.rdlc
布局如下:
同樣,我們也為子報表添加一個參數(shù)DeptNo,同時還要為子報表的Table設置Filters條件(條件的值在本例中跟主報表相同,同樣都是DeptNo=@DeptNo)
八、在rptDEPT.rdlc中插入子報表rptEMP.rdlc
子報表控件允許在一個報表中再插入另一個報表,如下圖:
然后在子報表上右擊,調出子報表屬性
設置加載哪個子報表
同時增加一個子報表參數(shù)
注:這里增加一個跟主報表同名的參數(shù)DeptNo,同時設置其值為主報表rptDEPT的參數(shù)@DeptNo
九、修改Default.aspx.cs代碼
View Code?| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | using System; using System.Data; using Microsoft.Reporting.WebForms; namespace ReportSample { ??? public partial class Default : System.Web.UI.Page ??? { ??????? protected void Page_Load(object sender, EventArgs e) ??????? { ??????????? if (!IsPostBack) ??????????? { ??????????????? //定義子報表處理方法 ??????????????? this.ReportViewer1.LocalReport.SubreportProcessing += new SubreportProcessingEventHandler(LocalReport_SubreportProcessing); ??????????????? this.ReportViewer1.LocalReport.ReportPath = "rptDEPT.rdlc";?????????????????? ??????????????? this.ReportViewer1.LocalReport.DataSources.Add(new ReportDataSource("DS_DEPT", GetDeptData())); ??????????????? //動態(tài)傳入參數(shù) ??????????????? this.ReportViewer1.LocalReport.SetParameters(new ReportParameter("DeptNo", "02")); ??????????? } ??????? } ??????? void LocalReport_SubreportProcessing(object sender, SubreportProcessingEventArgs e) ??????? { ??????????? e.DataSources.Add(new ReportDataSource("DS_EMP", GetEMPData())); ??????? } ??????? DataTable GetDeptData() ??????? { ??????????? DataTable dt = new DataTable(); ??????????? dt.Columns.Add("DEPTNO", typeof(string)); ??????????? dt.Columns.Add("DEPTNAME", typeof(string)); ??????????? dt.Rows.Add("01", "辦公室"); ??????????? dt.Rows.Add("02", "技術部"); ??????????? dt.Rows.Add("03", "銷售部"); ??????????? dt.Rows.Add("04", "客服部"); ??????????? return dt;???????????????? ??????? } ??????? DataTable GetEMPData() ??????? { ??????????? DataTable dt = new DataTable(); ??????????? dt.Columns.Add("EMPNO", typeof(string)); ??????????? dt.Columns.Add("EMPNAME", typeof(string)); ??????????? dt.Columns.Add("DEPTNO", typeof(string)); ??????????? dt.Rows.Add("001", "楊過","02"); ??????????? dt.Rows.Add("002", "令狐沖", "02"); ??????????? dt.Rows.Add("003", "黃蓉", "01"); ??????????? dt.Rows.Add("004", "小師妹", "03"); ??????????? dt.Rows.Add("005", "趙敏", "04"); ??????????? return dt; ??????? } ??????? ??? } } |
最終運行效果:
想想發(fā)生了什么?
主報表rptDept與子報表rptEMP設置了相同的參數(shù)以及過濾條件,代碼給主報表rptDept傳遞了參數(shù)DeptNo后,主報表rptDept又把參數(shù)值傳遞給子報表rptEMP,最終二個報表都實現(xiàn)了數(shù)據(jù)篩選.
?
?
?
?
作者:菩提樹下的楊過 出處:http://yjmyzz.cnblogs.com 本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。?
總結
以上是生活随笔為你收集整理的[转]RDLC报表-参数传递及主从报表的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux web服务安装apache
- 下一篇: 立体成像(1)