Groupヘッダ・フッタのTextBoxの値を明細データによって制御したい [ActiveReports] [ActiveReports]
----------------------------------------------------------
(開発・実行環境)
Microsoft Visual Studio 2005 Tools for Applications
Microsoft Visual Basic 2005
ActiveReports 2.0J Standard
----------------------------------------------------------
タイトルの文言では、いまいち何を言いたいかわかりにくい。。。
語彙不足。。。
さて、何がしたいかと申しますと。
明細データを項目の属性別に値を集計するときに、その属性毎にGroupHeader(又はFooter)のTextBoxの文字を変えたいような場合、ですね。
言い換えると、項目の属性別にグルーピングして、グループごと名前の表示を変えたいってことです。
(例えば・・・コーラ、オレンジジュース、お茶・・・飲料合計金額、パン、おにぎり、カップ麺・・・食料品合計金額、みたいな。伝わった?汗)
ActiveReportsは、めんどくさい(のか楽チンなのかよくわからない)ことに、データの数だけ勝手にレポートに出力してくれるんですが、各Sectionのデータの出力タイミングがどうにも制御しずらく、Detail SectionのTextBoxのデータをGroupFooter のFormatイベントで引っ張ってきても、データ行が一つズレていたりして、Groupの制御がうまくいかなかったんです。
なので、色々あーだこーだ試行錯誤した結果、 やっと自分なりに汎用的(?)な解決策が。
制御したいGroupのSectionにTextBoxを置いて、Visible = False とする。
このTextBoxをInitializeフィールドで、属性のデータを持つDataFieldsにバインドする。
属性TextBoxの値によって行う制御を、各SectionのFormatイベントに記述する。
これでどーにか、Group別にうまく制御することができましたとさ。
まぁ気づけばどうってことないんですけどね。。。
(今更ですが)文章が下手ですいません。
ActiveReports、うだうだ悩むよりガチャガチャイジって、理屈より経験的に覚えようかと思います。
ActiveReportsのページフッタにページ番号を印字する [ActiveReports]
----------------------------------------------------------
(開発・実行環境)
Microsoft Visual Studio 2005 Tools for Applications
Microsoft Visual Basic 2005
ActiveReports 2.0J Standard
----------------------------------------------------------
作成したレポートのページフッタに、「現在ページ/総ページ」を尋常に出力する場合は、以下のコードをレポートの作成する最初(ReportStartイベントとか)に宣言し、TextBoxに適用すればいいらしい。
(今回はやってないから知らんけど)
'カレントページ数
Me.txtPage.SummaryRunning = SummaryRunning.All
Me.txtPage.SummaryType = SummaryType.PageCount
'総ページ数
Me.txtPages.SummaryRunning = SummaryRunning.None
Me.txtPages.SummaryType = SummaryType.PageCount
今回やろうとしたのは、作成するレポートの中でも、キー項目が変更されたら改ページして、ページ番号を1にリセットする、というもの。
つまり、レポートで出力するページ数が10ページあっても、毎ページキー項目が変更になったら、全てのページ番号が1となるし、10ページ全て同じキー項目であれば、1~10を振る、ということ。
総ページの出力はしなかった。
ActiveReportsに出力するデータを格納した配列の、各レコードにページ番号も持たせ、DataInitializeイベントでアンバウンドフィールド(バウンドフィールド? ごめんなさい、よく言葉を知らない。。)を作ってレポート上のTextBoxと紐付け。
FetchDataイベントで配列の値をバウンドフィールドに当てるという、データの出力方法と同様に、ページ番号もページフッタに出力しようと試みた。
・・・が、配列のデータは正しく作れているのに、ページ番号がズレて表示される。。。
どうもページヘッダ・フッタには、変化するデータの値を使ってはいけないらしい。。。
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=37912&forum=7
https://www.grapecity.com/Japan/Support/Search/FaqContent.asp?id=13371
Detailやグループヘッダ・フッタと違って、ページヘッダは配列がまわる度に値を入れてくれないらしい。。
グループフッタにすると、1ページ目と2ページ目以降で出力位置がビミョーに変わるからそこに置きたくなく。。。 (レイアウトが変わるので)
あまりきれいな方法じゃないんだろうけど、DetailFormatイベントで、新しいページに変わるときに(If文による制御)、ページ番号のTextBoxのTextプロパティに、配列の値を入れていくことにした。
でも今回これで完成でもないし、どうなることやら。。
他にいい方法知ってる方いたら教えてください。
(その前に拙い文章ですいません。。)
ActiveReports・・・
クリレポと全然違うし、難しいな~。。
ActiveReportsでの印刷時にイベントをとる [ActiveReports]
----------------------------------------------------------
(開発・実行環境)
Microsoft Visual Studio 2005 Tools for Applications
Microsoft Visual Basic 2005
ActiveReports 2.0J Standard
----------------------------------------------------------
ActiveReports(AC)による帳票印刷時に、印刷フラグを立てる場合など。
CrystalReports(CR)を使うと、プレビューを出す場合はプレビュー表示以後、OSでの処理になって
イベントがとれなかった。
よって、プレビュー画面に自分で印刷ボタンを用意して対応せざるを得なかったが・・・。
ACでは、印刷プレビューから呼んだ印刷ダイアログのOKボタン押下時にイベントをとれるんです。
OnEndPrintイベント
素敵☆
プレビュー画面のLord時に以下でイベントに関連付け。
AddHandler .Document.Printer.EndPrint, AddressOf onEndPrint
そして、以下のイベント処理。
Private Sub onEndPrint(ByVal sender As Object, ByVal e As _ System.Drawing.Printing.PrintEventArgs)
~~~~~~~~~~~~
End Sub
GrapeCityのHPから「サポート」→「よくある質問」で探せます。
http://www.grapecity.com/japan/support/