クリスタルレポート現在のページを印刷
クリスタル・レポートの内部式では、PageNumberで現在のページ番号を取得できますが、この現在のページを外部で取得するにはどうすればいいですか?招待状の(招待状の住所を覚えていないで、惜しい~)の启発を受けて方法を整理します:
crystalReportViewer 1を追加することでNavigateイベントで取得
private void crystalReportViewer1_Navigate(object source,CrystalDecisions.Windows.Forms.NavigateEventArgs e){this.label 1.Text=e.NewPageNumber.ToString();/*ここでは閲覧するページを取得することを目的としていますが、実行中に取得したページ番号(label 1の表示値)*が水晶レポートの現在のページ番号と一致していることがわかりました*/this.label 1.Text=e.CurrentPageNumber.ToString();/* ここでは、現在のページ番号を取得することを目的としていますが、実際の実行中にこのページ番号(label 1表示値)*は、現在のページ番号ではなく、常に実際の現在のページ番号と一致していません.ロードされたばかりのとき、label 1*の表示値は-1であり、現在のトップページのCurrentPageNumberが-1であることを示しています.これは私たちが望んでいる*/*************************************************************************/*ではなく、特にこの2つの文をMessageBoxに変更しました.Show()はテストして、また新しい発見がありました:*の本意は本意で、間違いなく、NewPageNumberは確かに閲覧するページです.プログラムがロードされたばかりの時、先に*レポートを表示するのではなく、先に情報ボックス(1)をポップアップして、私たちが閲覧するページが第1ページであることを示して、私たちが情報ボックス*の「OK」ボタンをクリックしてからレポートを表示します.ページをめくるときも、まず情報ボックス(ページ番号情報はすべて*のページ番号に閲覧します)をポップアップし、確認してからページをめくることができます.*CurrentPageNumberも確かに現在のページ番号を取得していますが、前のテストの結果はなぜ-1の*状況に一致しないのでしょうか.なぜなら、レポートが正常に表示された後、1ページ目から2ページ目に戻ると、メッセージボックス(ページ番号:1)がポップアップされ、*確認後のレポートには2ページ目が表示され、最後のページからトップページに戻ると、メッセージボックス(ページ番号:最後のページ)がポップアップされ、*確認後にトップページが表示されるからです.*これは、この現在のページが取得されたことを示すのに十分ですが、ページをめくるときだけイベントがトリガーされます.ページ番号は取得されます.*しかし、レポートはすでにページ番号のページの下にありません.私たちはページ番号のページを離れたので、前のテストの*が一致しない場合があります.最初のロード時に-1が発生した理由については、私は測定できません.大胆に推測すると、最初のロード*時にレポートはまだ表示されていませんが、プログラムはcrystalReportViewer 1をトリガーします.Navigateイベントは、現在のページがない場合、*をデフォルト値(ここでは-1)に取得します.これは本人の予想にすぎません.また、ここを通っている鳥たちに教えてください.*/}
最後にReportDocument.PrintToPrinterメソッドで印刷すればよい.
メソッドパラメータの説明:
nCopies
印刷する部数を指定します.
collated
1部ずつ印刷するかどうかを指定します.
startPageN
印刷する最初のページを指定します.
endPageN
印刷する最後のページを指定します.
すべてのページを印刷するには、startPageNパラメータとendPageNパラメータをゼロに設定します.もちろん、ここでは現在のページを印刷し、startPageNパラメータとendPageNパラメータをConvertに設定することについて説明します.ToInt 32(label 1.Text)でいいです.
crystalReportViewer 1を追加することでNavigateイベントで取得
private void crystalReportViewer1_Navigate(object source,CrystalDecisions.Windows.Forms.NavigateEventArgs e){this.label 1.Text=e.NewPageNumber.ToString();/*ここでは閲覧するページを取得することを目的としていますが、実行中に取得したページ番号(label 1の表示値)*が水晶レポートの現在のページ番号と一致していることがわかりました*/this.label 1.Text=e.CurrentPageNumber.ToString();/* ここでは、現在のページ番号を取得することを目的としていますが、実際の実行中にこのページ番号(label 1表示値)*は、現在のページ番号ではなく、常に実際の現在のページ番号と一致していません.ロードされたばかりのとき、label 1*の表示値は-1であり、現在のトップページのCurrentPageNumberが-1であることを示しています.これは私たちが望んでいる*/*************************************************************************/*ではなく、特にこの2つの文をMessageBoxに変更しました.Show()はテストして、また新しい発見がありました:*の本意は本意で、間違いなく、NewPageNumberは確かに閲覧するページです.プログラムがロードされたばかりの時、先に*レポートを表示するのではなく、先に情報ボックス(1)をポップアップして、私たちが閲覧するページが第1ページであることを示して、私たちが情報ボックス*の「OK」ボタンをクリックしてからレポートを表示します.ページをめくるときも、まず情報ボックス(ページ番号情報はすべて*のページ番号に閲覧します)をポップアップし、確認してからページをめくることができます.*CurrentPageNumberも確かに現在のページ番号を取得していますが、前のテストの結果はなぜ-1の*状況に一致しないのでしょうか.なぜなら、レポートが正常に表示された後、1ページ目から2ページ目に戻ると、メッセージボックス(ページ番号:1)がポップアップされ、*確認後のレポートには2ページ目が表示され、最後のページからトップページに戻ると、メッセージボックス(ページ番号:最後のページ)がポップアップされ、*確認後にトップページが表示されるからです.*これは、この現在のページが取得されたことを示すのに十分ですが、ページをめくるときだけイベントがトリガーされます.ページ番号は取得されます.*しかし、レポートはすでにページ番号のページの下にありません.私たちはページ番号のページを離れたので、前のテストの*が一致しない場合があります.最初のロード時に-1が発生した理由については、私は測定できません.大胆に推測すると、最初のロード*時にレポートはまだ表示されていませんが、プログラムはcrystalReportViewer 1をトリガーします.Navigateイベントは、現在のページがない場合、*をデフォルト値(ここでは-1)に取得します.これは本人の予想にすぎません.また、ここを通っている鳥たちに教えてください.*/}
最後にReportDocument.PrintToPrinterメソッドで印刷すればよい.
メソッドパラメータの説明:
public virtual void PrintToPrinter(
int nCopies,
bool collated,
int startPageN,
int endPageN
);
パラメータ
nCopies
印刷する部数を指定します.
collated
1部ずつ印刷するかどうかを指定します.
startPageN
印刷する最初のページを指定します.
endPageN
印刷する最後のページを指定します.
コメント
すべてのページを印刷するには、startPageNパラメータとendPageNパラメータをゼロに設定します.もちろん、ここでは現在のページを印刷し、startPageNパラメータとendPageNパラメータをConvertに設定することについて説明します.ToInt 32(label 1.Text)でいいです.