報表開發中,經常需要從 ASP.NET 傳入動態參數、使用報表內建變數(頁碼、總頁數、執行時間等),以及靈活運用運算式格式化資料。本文系統整理這三大核心技能。

protected void ButtonReportGenerate_Click(object sender, EventArgs e) {
var reportDataSources = new List<ReportDataSource>();
var ds = new RportDataSet();
// ... 填充資料集 ...
var parameterList = new List<ReportParameter>();
// 關鍵:參數名稱必須與報表定義完全一致
parameterList.Add(new ReportParameter("Parameter1", "This is a parameter from code"));
// 多參數:parameterList.Add(new ReportParameter("Param2", "Value2"));
GetReportMultipleDataSourceFile(reportDataSources, "ReportTemplate/LogReport.rdlc", parameterList, "pdf");
}

位於 Expression 視窗的 Globals 類別下:
| 變數 | 說明 | 範例運算式 |
|---|---|---|
PageNumber | 當前頁碼 | ="目前頁次: " & Globals!PageNumber.ToString() |
TotalPages | 總頁數 | ="共 " & Globals!TotalPages.ToString() & " 頁" |
ExecutionTime | 報表產生時間 | =Globals!ExecutionTime.ToString("yyyy/MM/dd HH:mm:ss") |
ReportName | 報表名稱 | =Globals!ReportName |
ReportFolder | 報表檔案路徑 | =Globals!ReportFolder |
UserID | 執行使用者 | =Globals!UserID |
Language | 系統語言 | =Globals!Language |
在 Table 明細列新增欄位,運算式設為:
=RowNumber("YourDataSetName")
其中 YourDataSetName 為 Table 綁定的資料集名稱(可在 Table Properties → DataSetName 查看)。
| 需求 | 運算式範例 | 說明 |
|---|---|---|
| 字串串聯(同行) | =Fields!FirstName.Value + Fields!LastName.Value | 或使用 & 運算子 |
| 字串串聯(換行) | =Fields!FirstName.Value & vbCrLf & Fields!LastName.Value | TextBox 需設定 CanGrow=True |
| 條件判斷 | =IIF(Fields!LineTotal.Value > 100, "高額", "一般") | 真/假可回傳任意運算式 |
| 資料列計數 | =Count(Fields!DAILYCOUNT.Value, "DataSetName") | 指定資料集範圍 |
| 數值加總 | =Sum(Fields!DAILYCOUNT.Value, "DataSetName") | 同理指定範圍 |
| 日期格式化 | =CDate(Fields!TOPAINTDATE.Value).ToString("dd MMM yyyy") | 如 01 Jan 2024 |
| 條件格式(背景色) | =IIF(Fields!Status.Value="完成", "LightGreen", "White") | 套用於 TextBox BackgroundColor 屬性 |
| 隱藏零值 | =IIF(Fields!Amount.Value=0, "", Fields!Amount.Value) | 避免顯示多餘 0 |
=Sum(Fields!Amount.Value, "GroupName") // 群組內小計
=Sum(Fields!Amount.Value, "DataSetName") // 全域總計
=IIF(RowNumber(Nothing) Mod 2 = 0, "Gainsboro", "White")
=Join(Parameters!MultiParam.Value, ", ") // 將陣列參數轉為逗號分隔字串
報表屬性 → Code 頁籤撰寫 VB 函數,運算式中呼叫:=Code.MyFunction(Fields!Value.Value)
善用運算式可大幅減少後端代碼邏輯,將呈現邏輯封裝於報表模板內,符合關注點分離原則。