- 第一頁 (正面):為郵寄相關地址
- 第二頁 (反面):我方提供給對方確認內容
第一頁三摺就可以寄出去,對方確認後反摺可以寄回來
透過雙面列印這想法完成該需求,重點如下
- 報表來源
- 資料成對
- 識別第一頁、第二頁
以下會針對這三點來筆記
報表來源
報表來源是以 class 為主,所以該 class 會同時有第一頁和第二頁 property,用個 super class 承載全部資料,且該 class 必須自訂 PageNumber 來判斷是第一頁、第二頁
namespace PageNumberVisible
{
public class ReportModel
{
public int PageNumber { get; set; }
// 第一頁 Property
// 第二頁 Property
}
}
資料成對
是在 C# WinForm 上搭配 ReportViewer 來進行列印,所以在 AP 端要把資料變成兩筆,並同時給 PageNumber 值
using Microsoft.Reporting.WinForms;
using System;
using System.Collections.Generic;
using System.Windows.Forms;
namespace PageNumberVisible
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
// 理論上資料來源變成兩筆並要特別注意資料排序,筆記就簡易紀錄就好
List<ReportModel> reportSource = new List<ReportModel>();
reportSource.Add(new ReportModel() { PageNumber = 1 });
reportSource.Add(new ReportModel() { PageNumber = 2 });
reportSource.Add(new ReportModel() { PageNumber = 1 });
reportSource.Add(new ReportModel() { PageNumber = 2 });
this.reportViewer1.LocalReport.DataSources.Add(new ReportDataSource(nameof(ReportModel), reportSource));
this.reportViewer1.RefreshReport();
}
}
}
識別第一頁、第二頁
控件可見性屬性內使用 VB.NET MOD 函數搭配頁碼來判斷是第一頁、第二頁
- 頁首、頁尾:使用 SSRS 內建欄位 PageNumber
- 報表主體:使用 class 內自訂的 PageNumber 欄位
另外不是每個控件 GUI 內都會有可見性可以進行設定,沒有的話,可以在屬性視窗內找到 Hide,英文和中文翻譯剛好相反詞
內建欄位 PageNumber 只能應用在頁首、頁尾
報表呈現設計
在報表頁首和實體內放三個控見示意,左側控件是顯示頁碼,右側控件則是根據頁碼來決定是否顯示
報表執行
第三頁 (正面)
第四頁 (反面)
輸出時選擇印表機雙面列印,兩兩一份就可以完成該需求
沒有留言:
張貼留言