- PR -

パラメータフィールドに複数の値の表示方法

1
投稿者投稿内容
ほーこ
会議室デビュー日: 2008/08/07
投稿数: 4
投稿日時: 2008-08-07 20:45
いつもお世話になっております。
VS2005(C#)、CrystalReportを使用して帳票画面を作成しています。

DBに接続せずにプログラム上から複数の値をパラメータフィールドに渡し
値を表示させようとしているのですが上手くいかずに困っています。

******
CrystalDecisions.CrystalReports.Engine.ReportDocument report = new PtCrestalReport();//帳票画面を定義

ArrayList day = new ArrayList();
day.Add("6/1")
day.Add("6/2");
day.Add("6/3");
day.Add("6/4");

for (i = 0; i < day.Count; i++)
{
//パラメータフィールド名"data"
report.ParameterFields["data"].CurrentValues.AddValue(day[i]);
}

this.ReportView.ReportSource = report; //Viewに帳票を渡す

としたところ、一つの値しか表示されませんでした。
(パラメータフィールドの設定で複数の値を認めるにチェックはしてあります)

+−−−+
| data |
+−−−+
| 6/1
+−−−+
| 6/2
+−−−+


と表示したいのに
+−−−+
| data |
+−−−+
| 6/1
+−−−+
一つめのデータしか表示されない

複数の値を表示させることはできないのでしょうか?
reportの中身を見たところ値の所得はできていました。

よろしくお願いします。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2008-08-08 11:05
引用:

ほーこさんの書き込み (2008-08-07 20:45) より:

複数の値を表示させることはできないのでしょうか?
reportの中身を見たところ値の所得はできていました。


ParameterField は複数の値を表示するものではなく、単体もしくは複数の値からデータを絞り込む時に使用するものだと思っていたのですが... 複数表示できるというのはどこかから得た情報なのでしょうか? 逆に教示して頂きたいです。

ちなみにソースから値を渡したい場合、普通は非連結 TextField を使います。 式を書きたいのであれば FormulaField ですね。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
ほーこ
会議室デビュー日: 2008/08/07
投稿数: 4
投稿日時: 2008-08-08 13:54
じゃんぬねっと様

回答ありがとうございます。
パラメータフィールドは単体データ表示に使用するものなのですね。
認識違いをしていました。

非連結 TextField というのは非連結フィールドの文字列を指すのでしょうか?
もしそうだとしたら、値の渡し方を教えてもらえませんでしょうか?
調べてみましたが分かりませんでした。


聞いてばかりで申し訳ございませんがよろしくお願い致します。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2008-08-08 14:15
引用:

ほーこさんの書き込み (2008-08-08 13:54) より:

パラメータフィールドは単体データ表示に使用するものなのですね。
認識違いをしていました。


表示ではなく、名前どおりで "データを絞り込む" 時のパラメータになります。

引用:

非連結 TextField というのは非連結フィールドの文字列を指すのでしょうか?
もしそうだとしたら、値の渡し方を教えてもらえませんでしょうか?
調べてみましたが分かりませんでした。


TextObject の Text プロパティで設定します。
http://msdn.microsoft.com/ja-jp/library/ms226320(VS.71).aspx

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
ほーこ
会議室デビュー日: 2008/08/07
投稿数: 4
投稿日時: 2008-08-08 14:38
じゃんねっと様

早い回答ありがとうございます。

TextObjectを使用したところ値が上書きされ単一表示になってしまいました。
DataSet等DBからデータをとってくるように
プログラムのソース側から複数のデータを入れて表示していくことはできないのでしょうか?

何度も申し訳ございませんがお願いいたします。

*********
List<string> day = new List<string>();
day.Add("6/1")
day.Add("6/2");
day.Add("6/3");
day.Add("6/4");

CrystalDecisions.CrystalReports.Engine.TextObject txtObj;
txtObj = this.report.ReportDefinition.ReportObjects["date"] as CrystalDecisions.CrystalReports.Engine.TextObject;
txtObj.Text = day[i];
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2008-08-08 14:59
引用:

ほーこさんの書き込み (2008-08-08 14:38) より:

TextObjectを使用したところ値が上書きされ単一表示になってしまいました。

(snip)

txtObj.Text = day[i];


提示されたコードでは 1 つしか指定していないのですからそうなるのは当然のことだとしか言えないです。 複数表示するなら複数表示するコードを書かなければならないです。 複数行で表示したいのであれば改行コードを明示してやれば良いでしょう。

ちなみに文字列を改行コードで連結し 「複数行に出力」 という設定にしても TextObject では思ったように改行できないことがあります。 代わりに式フィールドを使うように推奨されていたかと思います。 式フィールドは TextObject の代わりに FormulaFieldDefinition クラスを使用します。

複数の TextObject を配置した方がレイアウト的には優れます。 またサンプル コードにある日付の羅列だと DataSource から取得してくるべきデータだと私は判断します。 あくまでサンプルという意味であればただの老婆心なので、この私の意見は気になさらなくても良いです。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
ほーこ
会議室デビュー日: 2008/08/07
投稿数: 4
投稿日時: 2008-08-08 15:20
じゃんぬねっと様、ありがとうございます。

WEB画面で入力されたスケジュール表(月分)をCrystalReportを使用して印刷したく、DBに接続せずそのまま値を渡して表の帳票画面が作成できないものかと思っていたのですが、じゃんぬねっと様のご教授の通りDataSourceからデータを取ってきた方がよさそうです。

DataSetに一度データを格納等して行ってみます。

ご教示ありがとうございました。助かりました。
1

スキルアップ/キャリアアップ(JOB@IT)