- PR -

[ASP.NET]ActiveReportへ値受け渡し

投稿者投稿内容
†raimu†
ベテラン
会議室デビュー日: 2005/08/23
投稿数: 61
投稿日時: 2005-09-27 16:34
ライムです。

デバッグして動きを見ていったところ、
ActiveReport1.rpxのコードのActiveReport1_FetchDataへ追加した
TextBox1.Text = HttpContext.Current.Session("TextBox1")
でエラーが発生していました。

試しに下記のようにWebForm1.aspxのコードのPage_Loadイベントに
---------------------------------------------------------------------
Dim rpt As New report

'用紙サイズをA4横に設定
rpt.PageSettings.PaperKind = System.Drawing.Printing.PaperKind.A4
rpt.PageSettings.Orientation = DataDynamics.ActiveReports.Document.PageOrientation.Landscape

'上下左右の余白を0.5cmに設定
rpt.PageSettings.Margins.Top = rpt.CmToInch(0.5)
rpt.PageSettings.Margins.Bottom = rpt.CmToInch(0.5)
rpt.PageSettings.Margins.Left = rpt.CmToInch(0.5)
rpt.PageSettings.Margins.Right = rpt.CmToInch(0.5)

Session("TextBox1") = "テスト表示"

rpt.Run(False)
rpt.Document.Save(Server.MapPath("") + "report.rpx", DataDynamics.ActiveReports.Document.RdfFormat.AR20)
---------------------------------------------------------------------
と記述してSession("TextBox1")へ値を直接入れてステップ実行していったところ、
rpt.Document.Saveを越えたところでSession("TextBox1")がNULLになるようです。

自分でも調べてみますが、良ければ知恵をお貸しください(TT
ぼのぼの
ぬし
会議室デビュー日: 2004/09/16
投稿数: 544
投稿日時: 2005-09-27 17:06
こちらでもステップ実行してみましたが、
ActiveReport1_FetchDataに処理が入るのは、rpt.Run(False)を呼んだ後です。
rpt.Document.Saveでエラーになるってことは、違うとこが原因だと思いますよ。

多分これ。Server.MapPath("") + "report.rpx"

デバッガのクイックウォッチで確認してみてください。\が抜けてるはず。
正しくはServer.MapPath("report.rpx")です。
でもこれだと既存ファイル名(ソースファイル)とかぶりませんか?
サーバルート下じゃなくてC:\Temp\test.rpxとかの方がいいような…
†raimu†
ベテラン
会議室デビュー日: 2005/08/23
投稿数: 61
投稿日時: 2005-09-27 18:31
ライムです。

ぼのぼの様に指摘頂いたコードを
--------------------------------------------
rpt.Document.Save(Server.MapPath("TEST.rpx"), DataDynamics.ActiveReports.Document.RdfFormat.AR20)
--------------------------------------------
このように変えてみました。
パスを「C:\」とするとWebサーバ上の仮想パスでないとダメらしく、
「仮想パスが必要です。」とエラーが出てしまいました。

これをウォッチしてみたところ
「rpt.Document.Saveこの引数の数を受け付ける 'Save' がないため、オーバーロードの解決に失敗しました。」
このようなエラーが表示されて居ました。
rpt.Document.Saveについて調べてみます(TT

[ メッセージ編集済み 編集者: †raimu† 編集日時 2005-09-27 18:41 ]
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-09-27 18:44
こんにちは、じゃんぬ です。

引用:

†raimu†さんの書き込み (2005-09-27 18:31) より:

パスを「C:」とするとWebサーバ上の仮想パスでないとダメらしく、
「仮想パスが必要です。」とエラーが出てしまいました。


絶対パスはダメなのです。
相対パスにしてください。


_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
お獅子
大ベテラン
会議室デビュー日: 2004/09/14
投稿数: 160
投稿日時: 2005-09-27 19:35
これを見れば全て解決。

http://www.grapecity.com/Japan/Support/Search/FaqContent.asp?id=14647
ぼのぼの
ぬし
会議室デビュー日: 2004/09/16
投稿数: 544
投稿日時: 2005-09-27 19:50
引用:

†raimu†さんの書き込み (2005-09-27 18:31) より:
パスを「C:」とするとWebサーバ上の仮想パスでないとダメらしく、
「仮想パスが必要です。」とエラーが出てしまいました。


あれ?ひょっとしてServer.MapPath("C:\Temp\TEST.rpx")って書かれましたか?Server.MapPathはサーバルートからの相対パスを求めるメソッドですから、絶対パス指定するなら
rpt.Document.Save("C:\Temp\TEST.rpx", DataDynamics.ActiveReports.Document.RdfFormat.AR20)
です。こちらの環境では、これでちゃんと動きました。

ただ、出力されたファイルが正しいかどうか見る方法がわからなかったもんで、少し調べてみたら、これってRDFファイルってやつですか?RDFファイル使ったことないんですが、標準の拡張子rpxではないんでは?
とりあえずDataDynamics.ActiveReports.Viewer.Viewerを使ったWindowsアプリを作ると開けるみたいだったので、やってみたらちゃんと出力されてました。

引用:

黒獅子さんの書き込み (2005-09-27 19:35) より:
これを見れば全て解決。

http://www.grapecity.com/Japan/Support/Search/FaqContent.asp?id=14647


引用:

ActiveReportsのイベント内で、Sessionオブジェクトの内容を直接参照するような機能は用意されておりません。
WebForm上で入力された値などを、生成するレポートに反映させる方法としては、下記のような方法が考えられます。


ええっ?? 私の環境で動いているのは何故?
ひょっとしてActiveReportsのバージョン古い?Version 3.0.0.1946ですが。
てっきり他の理由でSessionが使えなくなっているのかとばかり。

>ライムさん
一応確認したいんですけど、ActiveReports関係ないところで(つまり単純にaspx間で)はSession使えますか?
†raimu†
ベテラン
会議室デビュー日: 2005/08/23
投稿数: 61
投稿日時: 2005-09-27 20:24
じゃんぬねっと様>
相対パスで正常に…動いてるかわかりませんが(TT
エラーは回避することができました。
ありがとうございました。

黒獅子様>
ありがとうございますー(TT
無事にレポートのコントロールへ値を渡すことが出来ました。

ぼのぼの様>
>RDFファイル使ったことないんですが、標準の拡張子rpxではないんでは?
元はRDFファイルだったのですが、自分でRPXに書き換えちゃったのです。
やっぱり、わけわからないまま使うもんじゃないですね(TT
>ActiveReports関係ないところで(つまり単純にaspx間で)はSession使えますか?
aspxだけでしたら、Sessionはちゃんと使えていますよ。

なんか、皆様お騒がせしてすみませんでしたm(_ _)m

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