- PR -

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

投稿者投稿内容
†raimu†
ベテラン
会議室デビュー日: 2005/08/23
投稿数: 61
投稿日時: 2005-09-26 18:48
お世話になります。ライムです。

ActiveReportについて質問なのですが、
Webフォームのコントロール(TextBox等)の値を
ActiveReportのコントロールへ渡すことは可能なのでしょうか?
掲示板やヘルプも見たのですが、なにやら難しくて理解できなく…
よければ知恵をお貸し頂けないでしょうか。
お願いします。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-09-26 19:08
こんにちは、じゃんぬ です。

引用:

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

ActiveReportについて質問なのですが、
Webフォームのコントロール(TextBox等)の値を
ActiveReportのコントロールへ渡すことは可能なのでしょうか?


あれ? Web 版だと式フィールドへ値を渡せないんでしたっけ?

コード:

Option Strict On

Imports Cr = CrystalDecisions.CrystalReports.Engine

Public Class CrystalReportsHelper

  #Region " 式フィールドに値をセット "

    Public Shared Sub SetFormulaFieldsText(ByVal hReport As Cr.ReportClass, ByVal nFieldName As String, ByVal nSetText As String)
        Dim hObject As Cr.ReportObject = hReport.ReportDefinition.ReportObjects(nFieldName)
        Dim hField  As Cr.FieldObject  = DirectCast(hObject, Cr.FieldObject)

        DirectCast(hField.DataSource, Cr.FormulaFieldDefinition).Text = """" & nSetText & """"
    End Sub

  #End Region

End Class


ある掲示板で自分が書いたものを転送。(なので VB)

引用:

掲示板やヘルプも見たのですが、なにやら難しくて理解できなく…


そういう場合は、"どこ" を見たのか指し示して欲しいです。


_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
ぼのぼの
ぬし
会議室デビュー日: 2004/09/16
投稿数: 544
投稿日時: 2005-09-27 11:48
引用:

†raimu†さんの書き込み (2005-09-26 18:48) より:
ActiveReportについて質問なのですが、


引用:

じゃんぬねっとさんの書き込み (2005-09-26 19:08) より:
Public Class CrystalReportsHelper


製品違いませんか?(^^;
†raimu†
ベテラン
会議室デビュー日: 2005/08/23
投稿数: 61
投稿日時: 2005-09-27 12:15
返信ありがとうございます。

じゃんぬねっと様>
掲示して頂いたコードを埋め込んでエラーを修正しようとしましたが、
やはりCrystalReportsのコードだとどうにも…
きっとActiveReportで応用するよう掲示してくださったと解釈したのですが、
知識不足でどうしたら良いものか…(TT
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-09-27 12:23
こんにちは、じゃんぬ です。

引用:

ぼのぼのさんの書き込み (2005-09-27 11:48) より:

製品違いませんか?(^^;


あ、完全に誤爆しました... orz
(うわ、こんな長い時間放置されてたのか... orz)

で、お詫びに回答し直したいところなんですが、
ActiveReports の Web Edition は使ったことないんですよね... orz
Windows だと普通に ActiveReports 内のイベントから設定はできるんですよね。

ActiveReprots の Report クラスにプロパティを追加して、
Form の値を渡しておいて、Report 内のイベントで加工してセットしてやるような感じで。

Web だとできないのかな?


_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
ぼのぼの
ぬし
会議室デビュー日: 2004/09/16
投稿数: 544
投稿日時: 2005-09-27 12:58
ぼのぼのです。
Session経由で値を渡す方法なら分かります。
テキストボックスに入力した値をPDFに出力する簡単なサンプルを作ってみました。
VB.NETのWebアプリケーションです。以下手順。

(1)ActiveReport1.rpxを作成、DetailにLabel1を配置。
(2)(1)のコードを開き、ActiveReport1のFetchDataイベントハンドラを作成

コード:

Private Sub ActiveReport1_FetchData(ByVal sender As Object, _
ByVal eArgs As DataDynamics.ActiveReports.ActiveReport.FetchEventArgs) _
Handles MyBase.FetchData

Me.Label1.Text = HttpContext.Current.Session("TextBox1")
End Sub


(3)WebForm1.aspxを作成、TextBox1とButton1とPdfExport1を配置。
(4)(3)のコードを開き、Button1のClickイベントハンドラを作成

コード:

Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles Button1.Click

Dim rep As New ActiveReport1
Session("TextBox1") = Me.TextBox1.Text
rep.Run(False)

Dim strm As New System.IO.MemoryStream
Me.PdfExport1.Export(rep.Document, strm)

Response.ContentType = "application/pdf"
Response.AppendHeader("content-disposition", "inline; filename=MyPDF.PDF")
Response.BinaryWrite(strm.ToArray())
Response.End()
End Sub


--
編集:Response.AddHeader→AppendHeader 一応推奨されてる方を…

[ メッセージ編集済み 編集者: ぼのぼの 編集日時 2005-09-27 13:31 ]
†raimu†
ベテラン
会議室デビュー日: 2005/08/23
投稿数: 61
投稿日時: 2005-09-27 14:02
返信ありがとうございます。ライムです。

ぼのぼの様の方法で
WebForm1.aspxのコードのButton1_Clickイベントへ
Session("TextBox1") = TextBox1.Text

ActiveReport1.rpxのコードのActiveReport1_FetchDataへ
TextBox1.Text = HttpContext.Current.Session("TextBox1")

上記のコードを入れて実行してみたところ
----------------------------------------------------------
System.NullReferenceException:
オブジェクト参照がオブジェクト インスタンスに設定されていません。
----------------------------------------------------------
とエラーが出てしまいました。
きっとSession("TextBox1")がNULLなんですね…
やはり上記のコードだけじゃダメなんでしょうか?

[ メッセージ編集済み 編集者: †raimu† 編集日時 2005-09-27 14:03 ]
NAL-6295
ぬし
会議室デビュー日: 2003/01/26
投稿数: 966
お住まい・勤務地: 東京
投稿日時: 2005-09-27 14:05
引用:


ActiveReport1.rpxのコードのActiveReport1_FetchDataへ
TextBox1.Text = HttpContext.Current.Session("TextBox1")

上記のコードを入れて実行してみたところ
----------------------------------------------------------
System.NullReferenceException:
オブジェクト参照がオブジェクト インスタンスに設定されていません。
----------------------------------------------------------
とエラーが出てしまいました。
きっとSession("TextBox1")がNULLなんですね…
やはり上記のコードだけじゃダメなんでしょうか?



きっとではなく、一度、ステップ実行等でどちらがNullなのか確認した方が良いですよ。

_________________
「伝える」とは「人に云う」と書く。
http://d.hatena.ne.jp/NAL-6295/

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