Activereportsのレポートに値を渡す

アクティブレポートを今仕事で使っているのでよく忘れてしまうため記録
メインレポート・サブレポートに値を渡す両方同じ書き方ができる

'レポート呼び出し側コード
Dim rpt AS ReportsName

'データテーブルを渡す場合
rpt.Datasource = dt 'レポートに渡したいデータテーブル
'レポート内のコントロールに直接値を渡す場合
'Directcastするテキストボックスについてはレポートのテキストボックスと宣言しておく
 Directcast(rpt.Sections("Detail").Controls("TB_Ctrl"),TextBox).Text = "hogehoge"

Datasource にデータテーブルを渡している場合の受け取り方法

'DataInitializeのイベント
'DatatableのCol名を入力してどのデータを受け取るか教えてあげる
TB_Ctrl.DateField = "HogeCol1"

後はデータテーブルの数勝手にレポートを作成してくれる

'メインレポートの場合
rpt.Run()

'サブレポートの場合
'デザインでのサブレポートに教えてあげる
Me.SubCntrl.Report = rpt

応用?

メインレポートのデータテーブルをサブレポートにそのまま渡したりして、重複しているキー項目以外の場所を表示してもよいかもしれない
その場合はキーコントロールをGroupHeader1に設置してプロパティのGroupHeader1.DateFieldにデータのキーになる名前を設定してあげる

'メインレポートのデータをサブレポートに与える
Dim dt as New DataTable
dt = Directcast(Me.Datasource,DataTable)
'何か加工したい場合このタイミングで行う Hoge1 = データテーブルの列名
Dim q =From r In dt.Enumerable() Where r.Item("Hoge1").ToString = TB_Contrl Select r
Dim Choicedt = q.CopyToDataTable
Dim Subrpt as SubReport1
Subrpt.Datasource = Choicedt 

他にもスマートなやり方あるかもしれませんが誰かの参考になればいいかな

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です