一.寫作前提
前兩篇我們講到了如何在RDLC中如何插入和使用圖片,除了圖片以外,在報表中我們往往需要使用一些特定格式或在特定的條件下使用 特定的數據,或對數據做下些處理,並且可能存在一些數據是要我們從ASP.NET程序提供的,所以這篇我們主要講RDLC報表中如何使用參數 、表達式及常用常量。
由於最近項目比較緊,沒有時間寫過多復雜的東西,而群裡的兄弟又比較想知道頁首頁尾及合並表頭的設計,所以我把一個完事的設計 模板放在ReportTemplate文件夾中,提供給大家參考。
二.本文內容
1. 怎樣通過ASP.NET 程序為RDLC報表提供參數
2. 怎樣使用RDLC提供的變量及常用常量
3. 常用表達式的使用
4. 總結
5. 代碼下載(下載)
三.ASP.NET 程序為RDLC報表提供參數
在我們的報表中,往往需要從ASP.NET程序提供一些參數顯示在報表的指定位置,第一篇中我們已經講過怎樣傳遞一個數據集,但是我 們只需要一個值,總不能把這個值放到DataSet中來傳輸吧(因為DataSet本其實是由XML結成,在傳遞過程中需要比data本身更多的資源) ,所以這個時候我們就需要知道如何傳遞一個參數到RDLC報表。下面我們就來講一講。
不知道大家還記不記得我在第一篇中的Default.aspx.cs中寫的一個Button事件,如下。
1 protected void ButtonReportGenerate_Click(object sender, EventArgs e)
2 {
3 List<ReportDataSource> reportDataSource = new List<ReportDataSource> ();
4 RportDataSet ds = new RportDataSet();
5 string templatePath = string.Empty;
6 string totalRecords = string.Empty;
7
8 SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings ["LoggingConnectionString"].ConnectionString);
9 SqlCommand command = conn.CreateCommand ();
10 command.CommandType = CommandType.Text;
11 command.CommandText = "SELECT * FROM T_BC_LOGS";
12 SqlDataAdapter da = new SqlDataAdapter(command);
13 da.Fill(ds.T_BC_LOGS);
14 reportDataSource.Add(new ReportDataSource("RportDataSet_T_BC_LOGS", ds.T_BC_LOGS));
15
16 //TemplateFiles
17 templatePath = "ReportTemplate/LogReport.rdlc";
18 List<ReportParameter> parameterList = new List<ReportParameter>();
19 ////Generate Report
20 GetReportMultipleDataSourceFile(reportDataSource, templatePath, parameterList, "pdf");
21 }
其中我定義了一個泛型變量,如下:
List<ReportParameter> parameterList = new List<ReportParameter>();
但是我並沒有給這個變量賦任何值,我要告訴大家的就是這裡變量就是為我們傳遞參數提供的。好,下面我們就來講一下怎麼傳遞這個 參數。
1. 首先我們打開ReportTemplate文件夾中的RDLC報表模板,點擊報表的編輯區,然後打開Report菜單下的Report Parameters…,在 Report Parameters窗口中,我們點擊Add 按鈕,接著我們輸入這個參數的名稱與類型(這個名稱你要記住,因為下面的編程中要用到), 如果這個參數提供的時候不一定每次都有值,那麼我們則要選中 All null value的復選框,如下圖所示,如果你有多個參數則以此方法添 加即可。
2. 我們從Visual Studio IDE左邊的ToolBox中拖一個TextBox到這個報表模板的頁首(在我的報表中,復雜的表頭大部分都是通過 TextBox來實現的,可以設計 TextBox的邊框及字體等屬性來設計,所以後面的內容中我不會再提如何設計復雜的報表頁首),右擊這個 TextBox,選擇Expression…,在Expression窗口中,我們選擇Category中的Parameters,然後雙擊最右邊你剛剛加的那個參數,點擊確定即 可。至此,對報表的設計完成了。
3. 修改Default.aspx頁面中的程序如下所示:
1 protected void ButtonReportGenerate_Click(object sender, EventArgs e)
2 {
3 List<ReportDataSource> reportDataSource = new List<ReportDataSource> ();
4 RportDataSet ds = new RportDataSet();
5 string templatePath = string.Empty;
6 string totalRecords = string.Empty;
7
8 SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings ["LoggingConnectionString"].ConnectionString);
9 SqlCommand command = conn.CreateCommand ();
10 command.CommandType = CommandType.Text;
11 command.CommandText = "SELECT * FROM T_BC_LOGS";
12 SqlDataAdapter da = new SqlDataAdapter(command);
13 da.Fill(ds.T_BC_LOGS);
14 reportDataSource.Add(new ReportDataSource("RportDataSet_T_BC_LOGS", ds.T_BC_LOGS));
15
16 //TemplateFiles
17 templatePath = "ReportTemplate/LogReport.rdlc";
18 List<ReportParameter> parameterList = new List<ReportParameter>();
19 //為參數Parameter1傳遞This is a parameter
20 parameterList.Add(new ReportParameter ("Parameter1", "This is a parameter"));
21 ////Generate Report
22 GetReportMultipleDataSourceFile(reportDataSource, templatePath, parameterList, "pdf");
23 }
運行結果如圖所示:
四.使用RDLC提供的變量及常用常量
在RDLC報表中,有些你想得到的功能是用ASP.NET代碼完成不了的,比如說這個報表總共有多少頁,當前在第幾頁等等,這些功能我們 就要借助RDLC表達式中自帶的一些常量了,下面就讓我們來談談這此常量。
1. 顯示總共頁數及當前頁
a) 從Visual Studio IDE左邊的ToolBox中拖兩個TextBox到報表的頁首。
b) 右擊第一個TextBox,選擇Expression…,在Expression窗口的Category中選擇Globals,然後在Item中雙擊選擇TotalPages,這個變 量就是總共多少頁,為了方便我們查看,我們把在上面顯示的表達式進行修改如下:
="Total of "+Globals!TotalPages.ToString()
c) 按上面的加入總頁的方式,右擊第二個TextBox選擇Expression…,然後在選擇Globals,接著選擇PageNumber,這就是當前的頁數 ,同樣為了方便查看,修改如下:
=" Total of "+Globals!PageNumber.ToString()
注意:
剛才我們選擇總頁數和當前頁數的時候,是不是發現除了這兩個還有好幾個常量,現在解釋如下:
ExecutionTime 生成報表的時間 PageNumber 當前的頁號 ReportFolder 包含報表的文件路徑 ReportName 報表的名稱 ReportServerUrl 執行報表Server的路徑(這裡沒有用Server,所以沒有,如果用ReportService那就就存在了) TotalPages 總行數 UserID 當前執行報表的人 Language 執行報表Server的系統語言2. 為RDLC報表中數據行增加自動編號
a) 為了完成這個功能,我們完成這個功能,現在我們為報表中已經存在的Talbe在最左邊加一個字段叫S/N(這篇中沒有講表從哪裡來 ,請參閱[原創] RDLC 報表系列(一) 創建一個報表)。
b) 還記得我當時給這個表綁定了一個數據集嗎?選點右擊表,選擇Properties,從裡面拷出那個數據集的名稱。
c) 右擊S/N的數據字段,選擇Expression,在Expression的Category中選擇Common FunctionsàMiscellaneous,然後雙擊右邊Item中的 RowNumber,在其參數中輸入數據集的名稱,如下所示:
=RowNumber("RportDataSet_T_BC_LOGS")
五.常用表達式的使用
1. 連接字符
=Fields!FirstName.Value + Fields!LastName.Value 連接兩個字段在一個單元格中,並一行顯示
=Fields!FirstName.Value & vbCrLf & Fields!LastName.Value 連接兩個字段在一個單元格中顯示,但是換行顯示
2. If表達式使用
=IIF(Fields!LineTotal.Value > 100, True, False) 如果成立執行True的表達式,否則執行False表達式,我可也可以寫其它的表 達式代替代碼裡的東西
3. Count表達式使用
=Count(Fields!DAILYCOUNT.Value,"WeldingReportDataSet_T_WelderDaily") 計算WeldingReportDataSet_T_WelderDaily數據集中 DAILYCOUNT有多少行
3. Sum表達式使用
=Sum(Fields!DAILYCOUNT.Value,"WeldingReportDataSet_T_WelderDaily") 計算WeldingReportDataSet_T_WelderDaily數據集中 DAILYCOUNT的總和
4. Format表達式使用
=CDate(Fields!TOPAINTDATE.Value).ToString("dd MMM yyyy") 對date的格式進行應用
六.總結
通過上面的內容,我們學習到如下內容:
1. 從ASP.NET傳遞參數到RDLC報表中
2. 掌握如何使用RDLC提供的常量;
3. 掌握如何使用常用的表達式
本文配套源碼