RDLC 報表參數、常量及常用表達式的使用


在報表中我們往往需要使用一些特定格式或在特定的條件下使用特定的數據,或對數據做下些處理,並且可能存在一些數據是要我們從ASP.NET程序提供的,所以這篇我們主要講RDLC報表中如何使用參數、表達式及常用常量。

 

 

  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的復選框,如下圖所示,如果你有多個參數則以此方法添加即可。

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

  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提供的變量及常用常量

  在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. 掌握如何使用常用的表達式


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM