- - PR -
CrystalReportで2つ以上のデータソースからの反映について
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2003-07-28 00:52
お世話になります。
現在、Visual Studio.NETでCrystalReport for .NETを利用してWindowsアプリを 開発中です。(開発言語はVB.NETです) 方法としては、DatasetにデータをセットしてからデータをCrystalReportファイル に反映させています。 1つのDatasetからデータを読み込んで帳票に出力する方法はわかったのですが、 2つのDatasetから読み込んで帳票に出力する方法がわかりません。 やりたいことは、ヘッダー情報とその詳細の情報を別のDatasetに読み込んで、この 2つのDatasetを、ヘッダー部分にヘッダー情報、詳細部分に詳細データ情報を反映 して一覧を帳票出力したいのです。 この2つのDatasetへのデータが反映されていることは確認しています。が、Crystal ReportViewerに表示してみるとヘッダー情報は反映されているのですが、詳細データ 情報は一切反映されていません。 ※ちなみに、ヘッダー情報部分をソースと、CrystalReportファイルから削除すると 詳細データ情報部分が反映されます。 CrystalReportは、2つ以上のDatasetからのデータを反映させることはできないので しょうか?それとも、CrystalReportファイルで何か設定が必要なのでしょうか? ↓↓↓ソースはこのように書いています↓↓↓ Dim cr1 As New CrystalReport1() 'ヘッダー情報読み込み&セット Dim Ds1 As New DataAdapter() ← 独自で作ったデータベースアダプタ Dim ds_h As New ヘッダー情報() Ds.SelectCommand = "SELECT * from ヘッダー情報テーブル " _ & "WHERE id like '" & Select_ID & "%' " Ds1.Fill(ds_h, "HEADER") cr1.SetDataSource(ds_h) CrystalReportViewer1.ReportSource = cr1 '詳細データ情報読み込み&セット Dim Ds2 As New DataAdapter() ← 独自で作ったデータベースアダプタ Dim ds_k As New 詳細データ情報() Ds2.SelectCommand = "SELECT * FROM 詳細データ情報テーブル " _ & "WHERE id like '" & Select_ID & "%' " Ds2.Fill(ds_k, "SYOUSAI") cr1.SetDataSource(ds_k) CrystalReportViewer1.ReportSource = cr1 過去のログを見てがんばってみたのですが、この部分で躓いています。 どなたかご教授願えないでしょうか。 よろしくお願いします。 | ||||||||
|
投稿日時: 2003-08-01 00:30
自己レスです。
2つのデータセット(ヘッダー情報、詳細情報)から、にデータを読み込み、帳票を出力する実験をいろいろ試してみましたが、結局、2つのデータセットをドッキングさせて、鬼のようなSQL文を書き、1つのデータセットからCrystalReportにデータをセットする方法で帳票出力するようにしました。 もし考えてくれていた方がいましたら、申し訳ありませんが解決してしまいました。 方法がわかった方がいたら、ご教授願いえたら幸いです。 | ||||||||
|
投稿日時: 2003-08-01 09:44
こんにちは。
取り敢えずは解決しているようですが...。
MSDNライブラリでDataSetクラスについて調べると、以下のような記述があります。
つまり、1つのDataSetに、複数のDataTableを持たせる事が出来る、という事ですから、ヘッダー情報用と詳細情報用の2つのDataTableを1つのDataSetに持たせて、Reportのデータソースに指定すれば良いと思います。 | ||||||||
|
投稿日時: 2003-08-01 16:53
こんにちはー。
別のスレッドに書き込んだほうがいいかもしれませんが、 既にできていらっしゃる方に質問したほうが早いかなと 思い、質問させていただきます。 コンポーネントのDataAdapter等を使わず、自分で明記し DBの内容をCrystalReportsに出力したいのです。 ケンタさんはすでに、1つのデータソースからの反映が できていらっしゃるようで、もう少し詳しく教えていただきたいです。 「Dim ds_h As New ヘッダー情報()」と書かれていますが、 ヘッダー情報()は、具体的に何を指していらしてるのですか? ちなみに私はASP.NET(VB.NET)で開発しております。 | ||||||||
|
投稿日時: 2003-08-05 11:15
こんにちわ。ケンタです。
レス遅くなりました。 きくちゃんさん、調べていただきありがとうございました。 しかし、私もDataSetの中で2つのDataTable(ヘッダー情報用、詳細情報用) を使って読み込んでみたのですが、結果は同じで、片方のデータしかCrystalReport に反映されませんでした。 先日までは、SQLを駆使して1つのDataTableに読み込ませていたのですが、紆余 曲折ありまして2つのDataTableにデータを読み込んで(ヘッダー情報用、詳細情報用) そこからデータを抽出し帳票用に編集して新たに作成したDataTableにセットし、これを CrystalReportに反映させました。 一度DataTableに読み込んでから新たなDataTableにセットする。2度手間のように 感じますが、データを編集しなければならなくなったので、メンテナンスのことを 考え、単純なこの方法をとりました。 やはり、2つのデータソースをCrystalReportに反映させるのは厳しいのでしょうか... みのるさん、はじめまして。 >「Dim ds_h As New ヘッダー情報()」と書かれていますが、 >ヘッダー情報()は、具体的に何を指していらしてるのですか? というご質問でしたが、”ヘッダー情報()”というのはDataSet名です。 このヘッダー情報というDataSetに”HEADER”というDataTableを作成していました。 このレスを立てたときには、ヘッダー情報、詳細情報を別々のDataSetで定義して いたのでこのように書きました。 現在は、1つのDataSetに複数のDataTableを作成し、ヘッダー情報読み込み用、詳細 情報読み込み用、CrystalReportへの反映用の3つのを作成しています。 こんな回答でよろしいでしょうか? | ||||||||
|
投稿日時: 2003-08-05 12:58
ケンタさんこんにちは。
どのようなレポートを設計されているのか判りませんが、レポート上で2つのDataTableの間にリンクを設定してグループ化すれば、恐らく期待している結果が得られるのではないかと思います。 場合によっては、サブレポートを使用するという手もあります。 | ||||||||
|
投稿日時: 2003-08-05 13:35
ケンタさん、ありがとうございます。
1つのDataSetに複数のDataTableを作成されていると書かれていますが、 具体的にどのように作られているのですか? (DataSetとDataTableをあまり分かっていないので) 現在のソースは、このようにしております。 特に問題はないと思いますが。。。。 strSQL = strSQL & "SELECT * FROM TABLEA WHERE A =1" Dim oleAdapter As New OleDbDataAdapter Dim oleConn As New OleDbConnection(strODBC) oleAdapter.SelectCommand = New OleDbCommand(strSQL, oleConn) oleAdapter.Fill(ds, "aa") rp.SetDataSource(ds) これでデータセットをレポートに渡すことができると思いますが 渡してから、CrystalReports側では何かしなくていいのでしょうか? とても、基本的なことかもしれないのではと思いつつ質問をしていますが よろしくお願い致します。 |
1