- PR -

ASP.NET ActiveReports:アンバウンドレポートへのソース設定方法

投稿者投稿内容
やまじぃ
常連さん
会議室デビュー日: 2007/05/28
投稿数: 22
お住まい・勤務地: 日本国
投稿日時: 2007-06-01 18:41
ActiveReports未経験者なため初歩的な質問で申し訳ございません。

現在、ASP.NET+Active Reports for .NET 2.0J で帳票出力のサブシステムを実装している者です。


Web.sln
+Webプロジェクト:(TestReport)をプロジェクト参照
| |
| +TestWeb.aspx:プレビュー画面、WebViewerを配置
| |
| +App_Codeフォルダ
| +Controlフォルダ
| +WebFactory.vb(コントローラ):プレビュー画面の要求によりデータベースにアクセス。
| 該当データを取得、DataSetを返す。
+TestReport.vbproj(プロジェクト)
+rptTestReport.rpx(レポート本体):アンバウンドレポート


大まかな構造は上記のようになっており、手順としては

<呼び出しページ側>
1.印刷指示ページのボタンクリックにてコントローラのメソッド呼び出し。
2.コントローラより該当データのDataSetが返ってくる。
3.そのDataSetをレポートのDataSourceにセットする。
4.DataSetの名前をレポートのDataMemberにセットする。
5.レポート実行

<レポート側>
6.DataIntializeでアンバウンドフィールドを作成
7.アンバウンドフィールドてTextBoxを連結

<呼び出しページ側>
8.Viewerにレポート表示
のようになっております。


そこで質問なのですが、DataSourceとDataMemberをセットしている(?)にも関わらず、
レポートのDataInitializeでDataMemberが見つかりません、という内容の例外が発生してしまい
レポートが表示できないのです。


<呼び出しページの該当ソース>
Dim reportDataSet As New DataSet
reportDataSet = m_webFactory.SelectData(conditionKey) 'DataSet取得

If reportDataSet IsNot Nothing Then

'ドロップダウンリストの値でViewerType切り替え
If Me.ddlSlitForm.SelectedItem.Value.Equals(DropDownListSlitFormValue.MODE_HTML) Then
WebViewer1.ViewerType = DataDynamics.ActiveReports.Web.ViewerType.RawHtml
Else
WebViewer1.ViewerType = DataDynamics.ActiveReports.Web.ViewerType.AcrobatReader
End If

Dim testReport As New TestReport.rptTestReport()
testReport.DataSource = reportDataSet 'DataSetをセット・
testReport.DataMember = "TestReport" 'DataMemberにFactoryで指定したDataSetの名前"TestReport"をセット
testReport.Run(False) 'レポート実行

WebViewer1.ClearCachedReport() 'Viewerのキャッシュレポートをクリア
WebViewer1.Report = testReport 'ViewerにReportをセット
WebViewer1.Visible = True 'Viewer表示・
End If


<レポートの該当ソース>
Private Sub rptTestReport_DataInitialize(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.DataInitialize
'アンバウンドフィールドを作成
Fields.Add("A")
Fields.Add("B")
Fields.Add("C")

'アンバウンドフィールドをTextBoxと連結
Me.txtA.DataField = "A"
Me.txtAgencyName.DataField = "B"
Me.txtSRName.DataField = "C"

End Sub


ヘルプを参照したり、あちこち調べたのですがわからず終いで困っております。
どなたかお分かりになる方、教えて頂けませんでしょうか。宜しくお願い致します。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-06-01 19:10
引用:

やまじぃさんの書き込み (2007-06-01 18:41) より:

<レポートの該当ソース>
Private Sub rptTestReport_DataInitialize(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.DataInitialize
'アンバウンドフィールドを作成
Fields.Add("A")
Fields.Add("B")
Fields.Add("C")

'アンバウンドフィールドをTextBoxと連結
Me.txtA.DataField = "A"
Me.txtAgencyName.DataField = "B"
Me.txtSRName.DataField = "C"
End Sub


やりたいことの意図が読み取れているか自信がありませんが、ActiveReport クラスの FieldCollection に対して Add したフィールドを使うのではなくて (またはその必要はなくて)、単に DataField に reportDataSet (DataTable) 内の表示したい 'カラム名' を設定すれば良いのではないですか?

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
やまじぃ
常連さん
会議室デビュー日: 2007/05/28
投稿数: 22
お住まい・勤務地: 日本国
投稿日時: 2007-06-01 19:40
引用:

じゃんぬねっとさんの書き込み (2007-06-01 19:10) より:
引用:

やまじぃさんの書き込み (2007-06-01 18:41) より:

<レポートの該当ソース>
Private Sub rptTestReport_DataInitialize(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.DataInitialize
'アンバウンドフィールドを作成
Fields.Add("A")
Fields.Add("B")
Fields.Add("C")

'アンバウンドフィールドをTextBoxと連結
Me.txtA.DataField = "A"
Me.txtAgencyName.DataField = "B"
Me.txtSRName.DataField = "C"
End Sub


やりたいことの意図が読み取れているか自信がありませんが、ActiveReport クラスの FieldCollection に対して Add したフィールドを使うのではなくて (またはその必要はなくて)、単に DataField に reportDataSet (DataTable) 内の表示したい 'カラム名' を設定すれば良いのではないですか?






早速のご回答ありがとうございます。
意図は伝わっていると思います。
やりたいことを簡潔に説明しますと、

1.アンバウンドレポートにデータセットをバウンドして出力する。
2.出力形式はHTMLまたはPDFのうちいづれかを選択する。

難しく考えすぎていたようですので、早速ご指示通りにやってみたのですが、
「DataMemberが見つかりません。レポートのDataSourceとDataMemberプロパティを確認してください。」
というエラーが解消されません。
カラム名を設定する以外には何かあるのでしょうか?
DataMemberにはDataSet名を設定してあります。

[ メッセージ編集済み 編集者: やまじぃ 編集日時 2007-06-01 19:42 ]
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-06-01 19:56
引用:

やまじぃさんの書き込み (2007-06-01 19:40) より:

カラム名を設定する以外には何かあるのでしょうか?
DataMemberにはDataSet名を設定してあります。


DataMember は各フィールドに設定していますか?
またその時は DataTable 名になると思います。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
やまじぃ
常連さん
会議室デビュー日: 2007/05/28
投稿数: 22
お住まい・勤務地: 日本国
投稿日時: 2007-06-01 21:30
引用:

じゃんぬねっとさんの書き込み (2007-06-01 19:56) より:
引用:

やまじぃさんの書き込み (2007-06-01 19:40) より:

カラム名を設定する以外には何かあるのでしょうか?
DataMemberにはDataSet名を設定してあります。


DataMember は各フィールドに設定していますか?
またその時は DataTable 名になると思います。





ご指摘の通りレポートのDataMemberにはDataTable名を設定し、各フィールド(テキストボックス)のDataFieldにカラム名をセットした結果、DataMember・・・というエラーは表示されなくなりました。大変助かりました、ありがとうございます。
すみませんが、便乗して追加質問させて下さい。

1.ヘッダの高さを1ページ目とそれ以降で異なるようにする
2.それに伴い明細部の最大行数も1ページ目とそれ以降で変える
3.さらにグループ化により改ページさせる

という複合条件を持つ帳票なのですが、

1はオーバーレイ、
2は最大行数を設定/取得するプロパティをページ毎に変更する
3はグループヘッダのDataFieldにグループ化の対象項目を設定する

という方法で解決できるかと思ってるのですが、他のスレッドでも取り上げられている内容でページヘッダには可変要素のような項目を入れてはいけない、というのがあったように思います。
気になっているのが、1〜3を実現するにあたってはヘッダ項目を全てグループヘッダに配置すべきなのか?ということです(現在はヘッダ項目はページヘッダに配置してあります)。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-06-02 15:52
引用:

やまじぃさんの書き込み (2007-06-01 21:30) より:

ご指摘の通りレポートのDataMemberにはDataTable名を設定し、各フィールド(テキストボックス)のDataFieldにカラム名をセットした結果、DataMember・・・というエラーは表示されなくなりました。大変助かりました、ありがとうございます。


データも表示されたということでよろしいでしょうか。解決できたようで良かったです。

引用:

すみませんが、便乗して追加質問させて下さい。


元の質問と異なっておりますので、別のスレッドを建てた方が良いのではないかなぁと思います。

引用:

気になっているのが、1〜3を実現するにあたってはヘッダ項目を全てグループヘッダに配置すべきなのか?ということです(現在はヘッダ項目はページヘッダに配置してあります)。


そのページ内で常に同じ値を返すデータを扱う分には問題ありません。たとえば 「ページ番号」 などは問題ないですが、詳細セクションに配置すべきデータは扱ってはなりません。

オーバーレイによる制御はページ単位で行われるハズですので、扱っても良いということになります。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
やまじぃ
常連さん
会議室デビュー日: 2007/05/28
投稿数: 22
お住まい・勤務地: 日本国
投稿日時: 2007-06-04 00:23
引用:

すみませんが、便乗して追加質問させて下さい。


元の質問と異なっておりますので、別のスレッドを建てた方が良いのではないかなぁと思います。

マナー違反ですね、申し訳ございませんでした。
今後は気をつけます。


引用:

気になっているのが、1〜3を実現するにあたってはヘッダ項目を全てグループヘッダに配置すべきなのか?ということです(現在はヘッダ項目はページヘッダに配置してあります)。


そのページ内で常に同じ値を返すデータを扱う分には問題ありません。たとえば 「ページ番号」 などは問題ないですが、詳細セクションに配置すべきデータは扱ってはなりません。

オーバーレイによる制御はページ単位で行われるハズですので、扱っても良いということになります。


[/quote]

マナー違反の内容にも回答頂き有難うございました。

やまじぃ
常連さん
会議室デビュー日: 2007/05/28
投稿数: 22
お住まい・勤務地: 日本国
投稿日時: 2007-06-04 16:00
引用:

じゃんぬねっとさんの書き込み (2007-06-02 15:52) より:
引用:

やまじぃさんの書き込み (2007-06-01 21:30) より:

ご指摘の通りレポートのDataMemberにはDataTable名を設定し、各フィールド(テキストボックス)のDataFieldにカラム名をセットした結果、DataMember・・・というエラーは表示されなくなりました。大変助かりました、ありがとうございます。


データも表示されたということでよろしいでしょうか。解決できたようで良かったです。






エラーが表示されなくなった時点で別のエラーが発生し、そちらの解消に努めていたためご報告が遅れてしまいました。
確かにDataMember・・・というエラーは表示されなくなったのですが、肝心のデータが表示されないんです。またまた行き詰ってしまいました。
別のエラーというのは、WebViewerのReportNameプロパティに何も設定していなかったためレポートの参照ができずにいた、という事でした。
データさえ表示されればあともう少しという所のような気がしているのですが、その一歩が遠いです...

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