none
CrystalReports レイアウトの動的変更に関して RRS feed

  • 質問

  • 初めて質問させていただきます。

    CrystalReportsにdatasetで値を渡して、帳票をpdfに出力する開発を行っています。
    dataset内のdatatableのカラムの値によって、レイアウトを変更して一つのpdfファイルに出力することは可能でしょうか。


    具体的には
    ・ある学校の生徒(1名で1ページ)のプロフィール用紙を作成しています。
    ・性別によって出力するプロフィール項目、レイアウトが異なります。
    ・クラス単位でそのプロフィールを一つのpdfファイルに出力します。

    環境は以下のようになります。
    VisualStudio2008でC#で開発しています。

    どうかよろしくお願いします。



    2010年2月1日 6:38

回答

  • セクションや項目の表示非表示を切り替えることで実現可能です。

    方法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月1日 16:44

すべての返信

  • セクションや項目の表示非表示を切り替えることで実現可能です。

    方法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月1日 16:44
  • gekka 様

    ご丁寧な説明ありがとうございます。
    2パターンもお答えしてくださるとは思いもしなかったので感激しています。

    詳細を追加することは知っていましたが、このような使い方ができるとは知りませんでした。
    諸事情によりまだ実装できていませんが、詳細セクションを追加し、表示非表示でコントロールする方法でやってみようと思います。

    ありがとうございました。

    2010年2月2日 8:24
  • こんにちは。フォーラムオペレーターの高橋春樹です。

    gekkaさん、いつもお世話になっております。

    july7さん、初めまして。
    MSDNフォーラムのご利用有難うございます。

    今回gekkaさんからの投稿が有用な情報だと思いましたので
    勝手ながら、回答マークを付けさせて貰いました。

    今後ともMSDNフォーラムのご利用よろしくお願いします。


    マイクロソフト株式会社 フォーラム オペレーター 高橋春樹
    2010年2月4日 9:23