DOBON.NET DOBON.NETプログラミング掲示板過去ログ

クリスタルレポートのサブレポートの表示が空白行になる

環境/言語:[本文中に記載]
分類:[.NET]

開発環境
windows:8.1 64bit
DB:SQLServer2008
言語:VisualBasic2010
クリスタルレポート:13.0.2000.0

自社の業務管理ソフトの作成をしており、
顧客に渡す帳票をクリスタルレポートで作成しています。
帳票にはその日の販売商品の明細及び合計金額などを表示しています。
イメージとしては、以下の通りです。

◆完成予定帳票イメージ(簡略)
+-----------------------------------------+
(メインレポート)
帳票ID:1111111111
顧客ID:0000000000
 +---------------------------------+
 (サブレポート)
 明細1 商品A \10,000-
 明細2 商品B  \1,000-
 +---------------------------------+
預り金:\30,000-
代金 :\11,000-
残高 :\19,000-
+-----------------------------------------+

しかし、現在作成中の帳票は以下のようになっています。
サブレポートの行が全く表示されていません。

◆現在の表示帳票イメージ(簡略)
+-----------------------------------------+
(メインレポート)
帳票ID:1111111111
顧客ID:0000000000
 +---------------------------------+
 (サブレポート)
 空白行     ←行だけは表示されている
 空白行     ←行だけは表示されている
 +---------------------------------+
預り金:\30,000-
代金 :\11,000-
残高 :\19,000-
+-----------------------------------------+



いろいろ試してみたのですが、以下のコードで上記イメージになってます。
(不要なコードも入っていると思います)
コードやDBの構成などは以下の通りです。
おかしいところがわかる方、ご教授ください。

◆コード
Private Sub メインレポート_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
Dim scn As SqlClient.SqlConnection = New SqlClient.SqlConnection("Data Source=PC\DB;Integrated Security=True")
Dim sAdp_main As SqlClient.SqlDataAdapter
Dim dSet_main As DataSet = New DataSet
Dim dTbl_main As DataTable
Dim sAdp_sub As SqlClient.SqlDataAdapter
Dim dSet_sub As DataSet = New DataSet
Dim dTbl_sub As DataTable

Dim reportObj As New rpt_DetailedPrice()

'ユーザ権限
sAdp_main = New SqlClient.SqlDataAdapter("SELECT TBL_メインテーブル.*, TBL_サブテーブル.* FROM TBL_メインテーブル INNER JOIN TBL_サブテーブル ON TBL_メインテーブル.帳票ID = TBL_サブテーブル.帳票ID", scn)
sAdp_main.Fill(dSet_main, "メイン")
dTbl_main = dSet_main.Tables("メイン")

sAdp_sub = New SqlClient.SqlDataAdapter("SELECT * FROM TBL_サブテーブル", scn)
sAdp_sub.Fill(dSet_sub, "サブ")
dTbl_sub = dSet_sub.Tables("サブ")

Dim docSubReport As New ReportDocument()
docSubReport = reportObj.OpenSubreport(サブレポート名)

reportObj.SetDataSource(dTbl_main)

crv_DetailedPrice.ReportSource = reportObj
End Sub


◆DB構成
メインレポート(TBL_メインテーブル)
 帳票ID
 顧客ID
 預り金
 代金
 残高

サブレポート(TBL_サブテーブル)
 帳票ID
 商品名
 値段
■No32784に返信(くりれぽは荷が重いさんの記事)
> 自社の業務管理ソフトの作成をしており、
> 顧客に渡す帳票をクリスタルレポートで作成しています。
> 帳票にはその日の販売商品の明細及び合計金額などを表示しています。
> おかしいところがわかる方、ご教授ください。

わかる方ではありませんし、「ご教授」出来る方でもありませんが....
コード云々の前に、クリスタルレポートでどのように印刷プレビューが表示できる
のか説明してください。
つまり、クリスタルレポートというアプリケーションプログラムでレポートを
設計して、印刷プレビュー表示で期待した様に出力できるのかについて
教えてください。

サブレポートへ引数(パラメーター)が上手く渡せていないのではないかと想像しています。
しまさん、返信ありがとうございます。

■No32785に返信(しまさんの記事)
> コード云々の前に、クリスタルレポートでどのように印刷プレビューが表示できる
> のか説明してください。

こちらですが、最初の投稿の28行目あたりから書かせていただいた
簡略のイメージが印刷プレビューで表示される画面となります。
申し訳ありませんが、開発中の画像はご勘弁ください。

> つまり、クリスタルレポートというアプリケーションプログラムでレポートを
> 設計して、印刷プレビュー表示で期待した様に出力できるのかについて
> 教えてください。

一応、最初の投稿の12行目あたりから書かせていただいた
簡略のイメージが開発予定の画面となります。

また、クリスタルレポートの設計ですが、
フィールドをそれぞれメインレポート、サブレポートともに配置し、
帳票IDをグループ化のフィールドとして選択しています。
また、サブレポートはフィールドを横一列に配置しています。
そして「サブレポートのリンクの変更」より帳票IDを
サブレポートパラメータフィールドに選択しています。
説明の仕方が悪ければ、ご指摘ください。

> サブレポートへ引数(パラメーター)が上手く渡せていないのではないかと想像しています。

確かに、私もそう思います。
■No32784に返信(くりれぽは荷が重いさんの記事)

dTbl_subが使われていないみたいだけど大丈夫ですか?
■No32786に返信(くりれぽは荷が重いさんの記事)
>>コード云々の前に、クリスタルレポートでどのように印刷プレビューが表示できる
>>のか説明してください。
>
> こちらですが、最初の投稿の28行目あたりから書かせていただいた
> 簡略のイメージが印刷プレビューで表示される画面となります。
> 申し訳ありませんが、開発中の画像はご勘弁ください。

私の言い方がおかしいのかどうなのか分りませんが、画像を示せと読めるようには
書いていないと思います。
クリスタルレポートでそのレポートの印刷プレビューでサブレポートに予定通りの
内容が表示できているのか、表示出来ていないのかどちらなのですか?
■No32787に返信(shuさんの記事)
> ■No32784に返信(くりれぽは荷が重いさんの記事)
>
> dTbl_subが使われていないみたいだけど大丈夫ですか?

shuさん、返信ありがとうございます。
サブレポートにdtbl_subをセットしなくても、
空白行が行数分表示されます。
ですので、サブレポートにデータをセットする必要が
無いのではないかと考えています。
(ここが間違っているのでしょうか?)

メインレポートにinner join句で結合したデータをセットするだけでは
ダメなのでしょうか?
■No32788に返信(しまさんの記事)

> クリスタルレポートでそのレポートの印刷プレビューでサブレポートに予定通りの
> 内容が表示できているのか、表示出来ていないのかどちらなのですか?

タイトルにもありますように、サブレポートが予定通り表示されていない、
空白行が表示されている。
と書かせていただいておりますが、こちらの言葉不足がありました様です。
申し訳ありません。
とりあえず、許可を得ましたので、画像を上げてみます。
その方がわかりやすいかと思います。
添付ファイル: 1421751512.jpg (28 KB)
■No32790に返信(くりれぽは荷が重いさんの記事)
> ■No32788に返信(しまさんの記事)
>
>>クリスタルレポートでそのレポートの印刷プレビューでサブレポートに予定通りの
>>内容が表示できているのか、表示出来ていないのかどちらなのですか?
>
> タイトルにもありますように、サブレポートが予定通り表示されていない、
> 空白行が表示されている。
> と書かせていただいておりますが、こちらの言葉不足がありました様です。
> 申し訳ありません。
サブレポートが空欄でデーターが表示できないとあるだけでは、
わざわざ VB のコードを示してあることから、提示したコードで表示できないので
ご質問なさったのではないかと思いました
VB で書いたプログラムで表示させられないということなのか
クリスタルレポートの印刷プレビューで表示できないのか
どちらなのか書いてない以上私にはクリスタルレポートの印刷プレビューで
表示できないのだとは読み取れませんでした。

サブレポートは、メインレポートとは関連するが別のレポートなので、
メインレポートからサブレポートに引数(パラメーター)を渡してサブレポート内で
出力しなければなりません。

>>>サブレポートへ引数(パラメーター)が上手く渡せていないのではないかと
>>>想像しています。
と書いたのはそういう意味合いです。
つまり、クリスタルレポートでのレポートの編集で引数を指定してください。
■No32789に返信(くりれぽは荷が重いさんの記事)
> ■No32787に返信(shuさんの記事)
>>■No32784に返信(くりれぽは荷が重いさんの記事)
>>
>>dTbl_subが使われていないみたいだけど大丈夫ですか?
>
> shuさん、返信ありがとうございます。
> サブレポートにdtbl_subをセットしなくても、
> 空白行が行数分表示されます。
> ですので、サブレポートにデータをセットする必要が
> 無いのではないかと考えています。
> (ここが間違っているのでしょうか?)
>
データが設定されていないのにそのデータが印刷されるのはありえないと
思います。たまたま空白があいているだけではないでしょうか?
■No32792に返信(shuさんの記事)
> データが設定されていないのにそのデータが印刷されるのはありえないと
> 思います。たまたま空白があいているだけではないでしょうか?

そう考えたのですが、テストデータを追加すると、
追加しただけの件数が空白行で表示されるので、
データが渡されているのだと思います。
■No32794に返信(くりれぽは荷が重いさんの記事)
> ■No32792に返信(shuさんの記事)
>>データが設定されていないのにそのデータが印刷されるのはありえないと
>>思います。たまたま空白があいているだけではないでしょうか?
>
> そう考えたのですが、テストデータを追加すると、
> 追加しただけの件数が空白行で表示されるので、
> データが渡されているのだと思います。
>
繰り返しになりますがレポートにバインディングされていないデータが印刷される
わけがないのでそこら辺を確認してみて下さい。
テストデータを追加するとその行数分表示されるのはなんらかのバインディングが働いているからだとは思いますが提示された内容からはそれは読み取れません。
各種設定内容の見直し、コードの見直しをしてみて下さい。

スコープ内で宣言されたローカル変数はそれを渡さないと外部からは参照が出来ません。
■No32797に返信(shuさんの記事)

shuさん、しまさん返信ありがとうございます。
ちょっといろいろ試しております。
お時間を頂けますでしょうか。

よろしくお願いします。
shuさん、しまさんお待たせいたしました。
身内の不幸で、返信が遅れて申し訳ありませんでした。

結論から申しますと、解決しました。
今までと違う点を列挙しておきます。
@サブレポートを挿入する際、事前に作成しておいたレポートを選択した。
Aコードの変更を行い、サブレポート側にもデータテーブルを渡した
sAdp_main = New SqlClient.SqlDataAdapter("SELECT * FROM TBL_DETAILEDPRICE", scn)
sAdp_main.Fill(dSet_main, "メイン")
dTbl_main = dSet_main.Tables("メイン")

sAdp_sub = New SqlClient.SqlDataAdapter("SELECT * FROM TBL_DETAILEDPRICE_SUB", scn)
sAdp_sub.Fill(dSet_sub, "サブ")
dTbl_sub = dSet_sub.Tables("サブ")

Dim docSubReport As New ReportDocument()
docSubReport = reportObj.OpenSubreport("subreports1")
reportObj.SetDataSource(dTbl_main)
reportObj.Subreports("rpt_DetailedPrice_Sub.rpt").SetDataSource(dTbl_sub)

crv_DetailedPrice.ReportSource = reportObj

Aの変更だけでは、解決しなかったので、
@のレポートの作成も関与していたようです。

ま、わかったようなわからないような解決でしたが、
解決への重要なヒントを頂きましてありがとうございました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板