程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> RDLC報表系列(三) 參數、常量及常用表達式的使用

RDLC報表系列(三) 參數、常量及常用表達式的使用

編輯:關於.NET

一.寫作前提

前兩篇我們講到了如何在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. 掌握如何使用常用的表達式

本文配套源碼

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved