示例 3.交互式
在本例中,我們將看到如何通過單擊 "Matrix "對象的單元格來創建詳細報告。例如,我們將使用一個矩陣來顯示按年份分組的員工銷售額。
矩陣的數據源是 "MatrixDemo "表。該表顯示了按年和月分組的員工銷售額:
Name | Year | Month | ItemsSold | Revenue |
---|---|---|---|---|
Nancy Davolio | 1999 | 2 | 1 | 1000 |
Nancy Davolio | 1999 | 11 | 1 | 1100 |
Nancy Davolio | 1999 | 12 | 1 | 1200 |
Nancy Davolio | 2000 | 1 | 1 | 1300 |
Nancy Davolio | 2000 | 2 | 2 | 1400 |
Nancy Davolio | 2001 | 2 | 2 | 1500 |
Nancy Davolio | 2001 | 3 | 2 | 1600 |
Nancy Davolio | 2002 | 1 | 2 | 1700 |
Andrew Fuller | 2002 | 1 | 2 | 1800 |
Andrew Fuller | 1999 | 10 | 2 | 1900 |
Andrew Fuller | 1999 | 11 | 2 | 2000 |
Andrew Fuller | 2000 | 2 | 2 | 2100 |
Janet Leverling | 1999 | 10 | 3 | 3000 |
Janet Leverling | 1999 | 11 | 3 | 3100 |
Janet Leverling | 2000 | 3 | 3 | 3200 |
Steven Buchanan | 2001 | 1 | 3 | 4000 |
Steven Buchanan | 2001 | 2 | 4 | 4100 |
Steven Buchanan | 2000 | 1 | 4 | 3999 |
- 將 "MatrixDemo.Year "數據列放在列頭;
- 將 "MatrixDemo.Name "數據列放在行標題中;
- 將 "MatrixDemo.Revenue "數據列放在單元格中。

如圖所示,單元格的值是員工全年銷售額的總和。讓我們創建一個詳細報告,點擊單元格后就會顯示該報告。在我們的例子中,詳細報告可以包含所選員工在所選年度每個月的銷售額。
如何將單元格與打印數據連接起來?矩陣的每個單元格都有自己的地址。這是來自列標題和行標題的值的組合。在我們的示例中,單元格的地址是雇員年份和姓名的組合。這些數據可以準確地傳遞到詳細報告中。如何做到這一點呢?非常簡單:設置超鏈接,只顯示報告名稱和參數名稱。參數值無需標明:對于矩陣單元格,FastReport 本身會形成值并將其傳遞到參數中。
假設我們點擊了左上角包含數字 3900 的單元格。這是名為 "Andrew Fuller "的員工 1999 年的銷售額總和。使用什么表格將此值傳入參數?FastReport 使用分隔符合并列和行的值:
這是否意味著我們必須從這個字符串中提取年份值和員工姓名,將年份轉換為 int,然后使用這些值進行數據篩選?不,這要簡單得多。我們只需創建一個具有嵌套參數的參數。你可以在 "數據 "一章中了解到這一點。在本例中,父參數可以是這樣的1999;Andrew Fuller

創建參數時,請考慮以下時刻:
- 不需要設置父參數。只需給它命名即可;
- 父參數的嵌套參數數量必須與矩陣傳遞的值數量相同。在本例中,有兩個值;
- 嵌套參數的順序必須與矩陣傳遞值的順序一致。在本例中,年份將在第一個參數中傳遞,雇員姓名將在第二個參數中傳遞;
- 嵌套參數可以隨意命名,但最好與矩陣元素名稱一致;
- 正確設置每個嵌套參數的數據類型非常重要。數據類型必須與傳入參數的值一致。在我們的例子中,第一個參數(年份)必須是整數類型,第二個參數(員工姓名)必須是字符串類型。

在超鏈接配置中,將父參數指定為報告參數(在我們的示例中為 "SelectedCell"):
FastReport 將這些值傳入 SelectedCell.Year 和 SelectedCell.Name 嵌套參數。這些值將轉換為參數配置中指定的數據類型,因此正確配置參數數據類型非常重要。
詳細報告位于主報告的單獨頁面上,使用相同的數據源:

為了顯示所選員工在所選年份的銷售額,請設置篩選條件。為此,請打開 "Data"帶編輯器,并輸入以下篩選條件:
報告已準備就緒。運行報告并點擊左上角的單元格。將打開一份詳細報告,其中包含以下數據:[MatrixDemo.Year] == [SelectedCell.Year] && [MatrixDemo.Name] == [SelectedCell.Name]

如圖所示,數值之和(1900+2000)與我們點擊的矩陣單元格相對應。