帳票定義
準備ができたら帳票定義を行います。RDLレポートにはTableコントロールがあり手軽に一覧表が作成できます。
Tableコントロールをレポートデザイナーにドラッグ&ドロップするとヘッダ、詳細、フッターの3行から構成されたグリッドが表示されます。この詳細部分にDataSetに定義したフィールドを割り当てます。
詳細にフィールドを割り当てると自動的にヘッダにフィールド名が入ります。またセル同士を繋げて一つにしたり、詳細を複数行で定義したりすることもできます。今回のサンプルでは、最終的に詳細を2段にして次のような定義を行いました。
これにTableのコントロール罫線やLineコントロールを使用して罫線を引いてあげると、より帳票っぽくなるでしょう。
Viewerコンポーネントの設置
いきなり印刷してしまってもいいのですが、プリンターが手元にない時にも確認ができるように、MainWindowにビューアーを設置してプレビュー表示できるようにしましょう。
そのためには、まずツールボックスにViewerコンポーネントを追加します。
追加できたらWPFデザイナーでWPFウィンドウを表示しておき、ドラッグ&ドロップでViewerコンポーネントを配置してから微調整します。
Imports GrapeCity.ActiveReports Namespace Views Public Class MainWindow Private Runt As GrapeCity.ActiveReports.Document.PageDocument Public Sub New() ' この呼び出しはデザイナーで必要です。 InitializeComponent() ' InitializeComponent() 呼び出しの後で初期化を追加します。 Me.DataContext = Application.MainVM SetReports() '……(1) AddHandler Application.MainVM.PropertyChanged, AddressOf MainVM_PropertyChanged '……(2) End Sub Private Sub SetReports() Dim fi As New System.IO.FileInfo("CZ1503rdl.rdlx") Dim repDef As New GrapeCity.ActiveReports.PageReport(fi) Me.Runt = New GrapeCity.ActiveReports.Document.PageDocument(repDef) AddHandler Me.Runt.LocateDataSource, AddressOf runt_LocateDataSource End Sub Private Sub MainVM_PropertyChanged(sender As Object, e As ComponentModel.PropertyChangedEventArgs) If e.PropertyName = "DataSetData" Then Me.CZ1503Viewer.LoadDocument(Me.Runt) '……(3) End If End Sub Private Sub Runt_LocateDataSource(ByVal sender As Object, ByVal args As LocateDataSourceEventArgs) args.Data = Application.MainVM.DataSetData.Tables("Campaign") '……(4) End Sub End Class End Namespace
- ActiveReports用の設定を実施
- ReportModelが提供するデータが変化した時に発生するイベントを登録
- データが取得できたら帳票定義体をローディング
- ActiveReportsがデータを必要としたときに呼び出されるプロシージャの中でReportModelが作成したデータを設定
「args.Data = Application.MainVM.DataSetData.Tables("Campaign")」は、CDataで取得した全項目が入ったDataSetを6つの項目しか定義してなかったRDLレポートのDataSetに代入しています。これによりRDLレポートのDataSetは全項目を持つことになります。
その状態でも帳票定義体に指定したフィールド名と同一のものを印字します。
今回は意図的にCData側で全項目を取得しましたが、メモリ使用効率やデータ転送効率を考えるとCData側でも必要な項目だけを取得するようにしましょう。
まとめ
もしかしたら、海外では帳票というものの存在を知らないのでレポートで満足していたりしないでしょうか。例えば、お客様の手元に届く請求書や納品書は、日本品質の帳票出力の方がより満足いただける可能性があると考えます。もし、そういった可能性を今まで除外していたとしたら、レポートではなく帳票の可否を検討してみるとよいでしょう。