トップ回答者
Crystal Reports でレポートの動的生成はできますか?

質問
回答
すべての返信
-
AddFieldObjectで可能です。しかし、いろいろ調べてみましたが.NETに付属のCrystal Reportsでは対応していないようです。この辺りのドキュメントを見つけられればよかったのですが、見つけることができませんでした。ちなみに手元のCrystal Reports for Visual Studio 2010を見てみましたが、AddFieldObjectを見つけることができませんでした。
ちなみにどのようなことを実現されたいのでしょうか? 場合よっては代替案があるかもしれません。
★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/ -
trapemiyaさん、いつもありがとうございます。
小規模のマラソン大会用のアプリケーションを作っています。
(1)テーブルnumbersは開催回を管理するテーブル
n_id | number
-----+----------
1 | 10
-----+----------
2 | 11
(2)テーブルsectorは区間マスタでs_id | id | sector | n_id | notes
-----+---+--------+-----+-------
1 | 1 | 4P | 1 | 第4
-----+---+--------+-----+-------
2 | 2 | 9P | 1 | 第9
-----+---+--------+-----+-------
3 | 3 | 12P | 1 | 第12
-----+---+--------+-----+-------
4 | 4 | GP | 1 | ゴール
-----+---+--------+-----+-------
5 | 1 | 4P | 2 | 第4
-----+---+--------+-----+-------
6 | 2 | 9P | 2 | 第9
-----+---+--------+-----+-------
7 | 3 | GP | 2 | ゴール
(3)テーブルrecordsは記録管理テーブルで別にuserマスタテーブルがあり下記idフィールドは選手のゼッケン番号です。r_id | id | s_id | n_id | results
-----+------+-----+--- --+-----------
1 | 125 | 1 | 1 | 08:45:56
-----+------+-----+--- --+-----------
2 | 43 | 1 | 1 | 08:45:57
-----+------+-----+--- --+-----------
3 | 2 | 1 | 1 | 08:46:00
-----+------+-----+--- --+-----------
snip
-----+------+-----+--- --+-----------
512 | 125 | 2 | 1 | 10:12:51
-----+------+-----+--- --+-----------
513 | 3 | 2 | 1 | 10:12:52
このようなテーブル構成から
(2)を元にn_idが1(開催回10)のレコードが
(第4,第9,第12,ゴール)4レコードあれば
カラムをt1, t2, t3, t4に、
n_idが2(開催回11)のレコードが
(第4,第9,ゴール)3レコードあれば
カラムをt1, t2, t3というように
動的に一時テーブルのフィールドを生成を作るところまでは出来たのですが
それを元にCrystal Reportsのフィールドを動的に生成できないものかと
質問させていただいた次第です。
何か代替案等ありましたらお願いいたします。
-
返信が遅くなりました。すみません。
さて、代替案としては既にChukiさんがリンク先に示されている通りの方法になると思います。汎用のデーターテーブルを用意しておき、そこに印刷するデータをセットして印刷を行います。(この汎用のデーターテーブルは、Chukiさんのリンク先ではCustomerという名前で作成されています。)
汎用データーテーブルには十分な列を用意しておきます。例えば10列でも構いません。印刷しない列には空白をセットすれば良いのですから。具体的には開催回が10の時には、4レコードありますから、汎用データーテーブルの1列から4列までにそれぞれのタイムをセットし、5列から10列は空白をセットします。これにより、5列から10列までは印刷されないのと同等になります。
1列から4列の列間隔が気になるようであれば、以下のコードで列の位置をコードで変更することができます。var report = new レポートの名前();
report.ReportDefinition.ReportObjects[フィールドオブジェクトの名前].Left = 左端からの距離;列タイトルはパラメーターフィールドにしてしまい、列データと同様に1列から4列には列タイトルをセットし、5列から10列には空白をセットすれば良いでしょう。
★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/