在 SSRS 報表內,資料來源為 DataSet 的話,要顯示每一筆資料必須把資料放在報表主體 (body) 內搭配清單 (List) 或 Tablix 等控件來顯示,而頁首、頁尾只能插入文字方塊 (TextBox)、線條、矩形、影像 (Image) 這四種控件,直接從 DataSet 字串欄位拉進頁首、頁尾的話,文字方塊值會有彙總運算式如下
=First(Fields!Data.Value, "DataSet 名稱")
運算式會自帶 First() 並只顯示第一筆資料的欄位資料,跳至其他分頁的話,該文字方塊不會跟著變化,有嘗試把 First() 移除,SSRS 雖然不會報錯,但仍然維持相同結果。
在官方文章 -
在頁首或頁尾中顯示變數資料 有提到繞道做法,必須在頁首、頁尾上透過 ReportItems (Report 控件) 來顯示 DataSet 內的每一筆資料、圖片
資料來源 DataSet
只塞入兩筆資料為別為 1234567890、ABCDEFGHIJ,在 AP 端是透過 Xing 套件把這兩筆資料轉成 Barcode 並用 byte[] 來儲存
public class ReportModel
{
public string Data { get; set; }
public byte[] Barcode { get; set; }
}
報表 layout 設計
黃框為頁首、綠框為 Body
在頁首、頁尾顯示文字
在頁首、頁尾內插入 TextBox 後,值設定值直接指定 Boby 內的 txtData 控件,設定如下
=ReportItems!txtData.Value
從下圖執行結果內的頁碼可以發現,跳至第二筆資料後,直接抓 txtData 控件可以顯示第二筆資料 ABCDEFGHIJ
在頁首、頁尾顯示圖片
ReportItems 是 TextBox 控件集合,不包含 Image 控件,沒有辦法像文字一樣,直接指定控件,所以圖片要特別處理,首先要在 Body 插入 TextBox (命名為 txtHiddenBarcode),並把圖片轉為字串如下
=Convert.ToBase64String(Fields!Barcode.Value)
頁首、頁尾的 Image 控件,則是抓取 ReportItems 的 txtHiddenBarcode 值再透過 Convert.FromBase64String 轉回圖片來顯示
=Convert.FromBase64String(ReportItems!txtHiddenBarcode.Value)
實務上使用會把 txtHiddenBarcode 隱藏起來,畢竟它只是傳遞資料媒介