星期三, 4月 19, 2023

[RV] 新聞稿樣式報表 - 分頁

經歷這兩篇筆記,發現在 SSRS 內要設計多欄位報表進行分頁,似乎是不可行
轉念從 C# 程式 Code 來處理分頁需求,作法很單純就是把針對群組跑迴圈,一個群組就送一次報表,每次都直接輸出不預覽,SSRS 多欄位報表內就不用特別設計,拉一個 Tablix 在多欄位報表內顯示資料而已,但該作法缺點在於
  • 直接輸出,沒有辦法預覽:真的需要預覽功能的話,需要拉一個用頁面來顯示相關資料,讓使用者先行確認,確認後再進行列印
  • 無法使用 SSRS 內建頁碼功能:實務上剛好也沒有這個需求,就沒有多加研究,暫時 pass 囉
直接輸出報表,請參考該筆記 - [RV] 列印本機報表而不進行預覽

以 AdventureWorks2019 Person.Address Table 資料為主,針對程式跑迴圈並直接輸出報表至印表機
namespace MultiColumnPageBreak
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            var dbContext = new AdventureWorks2019DbContext();

            var source = dbContext.Address
                 .Where(x => x.City == "Miami" || x.City == "Snohomish")
                .OrderBy(x => x.City)
                .ThenBy(x => x.AddressLine1)
                .ToList();

            var reportDataSource = new ReportDataSource(nameof(Address));
            reportViewer1.LocalReport.DataSources.Add(reportDataSource);

            var cities = source.GroupBy(x => x.City).Select(x => x.Key).ToList();
            foreach (string city in cities)
            {
                var citySource = source.Where(x => x.City == city).ToList();
                reportDataSource.Value = citySource;

                // TODO 報表直接輸出
            }
        }
    }
}

正常多欄位報表

   [RV] 新聞稿樣式報表 - 分頁-1

群組跑迴圈直接輸出印表機,下面截圖還是透過 SSRS 預覽來呈現的,可以呈現效果就行

[RV] 新聞稿樣式報表 - 分頁-2

[RV] 新聞稿樣式報表 - 分頁-3

沒有留言:

張貼留言