トップ回答者
CrystalReports レイアウトの動的変更に関して

質問
-
初めて質問させていただきます。CrystalReportsにdatasetで値を渡して、帳票をpdfに出力する開発を行っています。dataset内のdatatableのカラムの値によって、レイアウトを変更して一つのpdfファイルに出力することは可能でしょうか。具体的には・ある学校の生徒(1名で1ページ)のプロフィール用紙を作成しています。・性別によって出力するプロフィール項目、レイアウトが異なります。・クラス単位でそのプロフィールを一つのpdfファイルに出力します。環境は以下のようになります。VisualStudio2008でC#で開発しています。どうかよろしくお願いします。
回答
-
セクションや項目の表示非表示を切り替えることで実現可能です。
方法1:セクション分割
男女共通の項目、男子のみの項目、女子のみの項目の3つのグループに分けるとします。
どれでもいいのでセクションを選択して右クリックか、MenuのCrystalReportsのレポートから、セクションエキスパートを表示します。
セクションのリストで詳細セクションを選択して2回挿入をします。そうすると詳細a,詳細b,詳細cというセクションが作られます。
以下、共通項目をa,男子のみb,女子のみcに配置するとします。
詳細aは常に表示なので、設定は変更しません。
詳細bは男子のみなので、右の共通タブで「非表示-ドリルダウン不可」の隣のX-2のようなボタンをクリックします。そうすると式ワークショップというダイアログが出るので、「{Table.性別}<>"男"」のような式を入力します。これで、男でないときは非表示になります。
詳細bは女子のみなので、右の共通タブで「非表示-ドリルダウン不可」の隣のX-2のようなボタンをクリックします。そうすると式ワークショップというダイアログが出るので、「{Table.性別}<>"女"」のような式を入力します。これで、女でないときは非表示になります。
一人分で1ページにするために、詳細を選択して「出力後に改ページ」にチェックを入れることで、1レコード毎に改ページされるようになります。
これで、
男子は詳細a+詳細b+改ページ (詳細cは無し)
女子は詳細a+詳細c+改ページ (詳細bは無し)
になります。
セクションが分割できたら、あとはデザインでそれぞれの項目を該当する詳細セクションに配置していきます。
方法2:混在(セクションのような明確な分割が出来ない場合)
どれでもいいのでセクションを選択して右クリックか、MenuのCrystalReportsのレポートから、セ クションエキスパートを表示します。
一人分で1ページにするために、詳細を選択して「出力後に改ページ」にチェックを入れることで、1レコード毎に改ページされるようになります。
あとは全部の項目を詳細セクションに配置していきます。
配置が終わったら、男子もしくは女子のみの項目を選択して右クリックで、オブジェクトの書式設定ダイアログを表示します。
共通タブにある非表示のチェックボックスの横のX-2のようなボタンをクリックします。
式ワークショップというダイアログが出るので、男子のみの項目は「{Table.性別}<>"男"」のような式を入力します。これで、男でないときは非表示になります。女子のみの項目は「{Table.性別}<>"女"」のような式を入力します。これで、女でないときは非表示になります。
表示非表示が変化するオブジェクト全てに対して同様の式を設定していきます。
#式の詳細な内容はCrystalReportの式のヘルプなどを参照してみてください。- 回答としてマーク 高橋 春樹 2010年2月4日 9:19
すべての返信
-
セクションや項目の表示非表示を切り替えることで実現可能です。
方法1:セクション分割
男女共通の項目、男子のみの項目、女子のみの項目の3つのグループに分けるとします。
どれでもいいのでセクションを選択して右クリックか、MenuのCrystalReportsのレポートから、セクションエキスパートを表示します。
セクションのリストで詳細セクションを選択して2回挿入をします。そうすると詳細a,詳細b,詳細cというセクションが作られます。
以下、共通項目をa,男子のみb,女子のみcに配置するとします。
詳細aは常に表示なので、設定は変更しません。
詳細bは男子のみなので、右の共通タブで「非表示-ドリルダウン不可」の隣のX-2のようなボタンをクリックします。そうすると式ワークショップというダイアログが出るので、「{Table.性別}<>"男"」のような式を入力します。これで、男でないときは非表示になります。
詳細bは女子のみなので、右の共通タブで「非表示-ドリルダウン不可」の隣のX-2のようなボタンをクリックします。そうすると式ワークショップというダイアログが出るので、「{Table.性別}<>"女"」のような式を入力します。これで、女でないときは非表示になります。
一人分で1ページにするために、詳細を選択して「出力後に改ページ」にチェックを入れることで、1レコード毎に改ページされるようになります。
これで、
男子は詳細a+詳細b+改ページ (詳細cは無し)
女子は詳細a+詳細c+改ページ (詳細bは無し)
になります。
セクションが分割できたら、あとはデザインでそれぞれの項目を該当する詳細セクションに配置していきます。
方法2:混在(セクションのような明確な分割が出来ない場合)
どれでもいいのでセクションを選択して右クリックか、MenuのCrystalReportsのレポートから、セ クションエキスパートを表示します。
一人分で1ページにするために、詳細を選択して「出力後に改ページ」にチェックを入れることで、1レコード毎に改ページされるようになります。
あとは全部の項目を詳細セクションに配置していきます。
配置が終わったら、男子もしくは女子のみの項目を選択して右クリックで、オブジェクトの書式設定ダイアログを表示します。
共通タブにある非表示のチェックボックスの横のX-2のようなボタンをクリックします。
式ワークショップというダイアログが出るので、男子のみの項目は「{Table.性別}<>"男"」のような式を入力します。これで、男でないときは非表示になります。女子のみの項目は「{Table.性別}<>"女"」のような式を入力します。これで、女でないときは非表示になります。
表示非表示が変化するオブジェクト全てに対して同様の式を設定していきます。
#式の詳細な内容はCrystalReportの式のヘルプなどを参照してみてください。- 回答としてマーク 高橋 春樹 2010年2月4日 9:19