- PR -

ASP.NETでActiveReportが表示されない件

1
投稿者投稿内容
さつきち
会議室デビュー日: 2008/03/27
投稿数: 7
お住まい・勤務地: 関西
投稿日時: 2008-03-27 15:37
ASP.net(2005)にActiveReportのWebViewerを設置し、ViewTypeプロパティを「ActiveXViewer」に設定し実行しましたが、レポートが表示されず、「No Report Specified.」というメッセージが表示されます。
色々調査した結果、レポートがNewした時と表示する時の2回走ってるようで、2回目に設定したDataSourceなどすべてNothingになってしまいます。WebViewerのReportNameには値は入れていないのですが・・・。
なぜ2回走るかがわからずに困っています。
よろしくお願い致します。

Form側
Public Class WebForm1
  Inherits System.Web.UI.Page
  ・
  ・
  Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    Dim rpt As New ActiveReport1  ← ここで1回目のレポート側のNewが走ります。
    Dim retDataSet As New DataSet

    '表示するデータの取得
    retDataSet = getDataset()

    'レポートにデータをセット
    rpt.DataSource = retDataSet

    'レポートを作成します。
    rpt.Run(False)

    With Me.WebViewer1
      .ClearCachedReport()
      .Report = rpt
      .Style.Item("Top") = "0px"
      .Style.Item("left") = "0px"
      ' WebViewerのサイズを設定します。
      .Width = Unit.Percentage(100)
      .Height = Unit.Percentage(100)
      .Style.Item("height") = "100%"
      .Style.Item("width") = "100%"
    End With
  End Sub
  .
  .
End Class


レポート側
Public Class ActiveReport1
  Inherits ActiveReport

  Public Sub New()
    MyBase.New()
    InitializeReport()
  End Sub
  .
  .
End Class
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2008-03-27 17:14
引用:

五月さんの書き込み (2008-03-27 15:37) より:

レポートがNewした時と表示する時の2回走ってるようで、2回目に設定したDataSourceなどすべてNothingになってしまいます。WebViewerのReportNameには値は入れていないのですが・・・。なぜ2回走るかがわからずに困っています。


? ASP.NET 基本の IsPostBack プロパティ分岐で問題ないように思えます。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
さつきち
会議室デビュー日: 2008/03/27
投稿数: 7
お住まい・勤務地: 関西
投稿日時: 2008-03-27 18:47
じゃんぬねっと様
ありがとうございます。

デバッグしてみたのですが、
Page_Loadは2回実行されていませんでした。

もう少し調査してみます。

ありがとうございました。
さつきち
会議室デビュー日: 2008/03/27
投稿数: 7
お住まい・勤務地: 関西
投稿日時: 2008-04-01 11:03
いつもお世話になっております。

根本的解決ではないのですが、解決をしましたのでご報告いたします。

結論から言いますと、「WebViewer」の使用をやめ、帳票をRDF形式でファイルに保存しaspx内で読み込むようにしました。

Form側(WebForm1.aspx.vb)
Public Class WebForm1
  Inherits System.Web.UI.Page
  ・
  ・
  Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    Dim ds As New DataSet
    Dim rpt As ActiveReport1 = New ActiveReport1
    Dim rdfFileName As String

    '表示するデータの取得
    retDataSet = getDataset()

    'レポートにデータをセット
    rpt.DataSource = retDataSet.Tables(0)

    'レポート処理を開始
    rpt.Run(False)

    'rdfファイル名作成
    rdfFileName = PartFunc.getSysdateYYYYMMDDHHMMSS + "_Print_" + Session.SessionID + ".rdf"

    'セッションにrdfファイル名を格納(WebForm1.aspx内のdatapathの指定で使用)
    Session("Printfile_Name") = rdfFileName

    'ドキュメントの内容をRDF形式でファイルに保存
    rpt.Document.Save(Server.MapPath("") + "\\ReportOutput\\" & rdfFileName, DataDynamics.ActiveReports.Document.RdfFormat.AR20)
  End Sub
  .
  .
End Class


HTML側(WebForm1.aspx)
<%@ Page Language="vb" AutoEventWireup="false" Codebehind="WebForm1.aspx.vb" Inherits="Web.WebForm1" %>
<%@ Register TagPrefix="activereportsweb" Namespace="DataDynamics.ActiveReports.Web" Assembly="ActiveReports.Web, Version=4.3.0.1261, Culture=neutral, PublicKeyToken=cc4967777c49a3ff" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
<title>プリントテスト</title>
<script FOR=arv EVENT=ControlLoaded language="javascript">
<!--
arv.datapath = "ReportOutput/<%=Session("Printfile_Name")%>"; ← ここでファイル名を使用
//-->
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
<OBJECT id="arv" codeBase="arview2.cab#Version=2,4,2,1303" height="100%" width="100%" classid="clsid:8569D715-FF88-44BA-8D1D-AD3E59543DDE" VIEWASTEXT>
<PARAM NAME="_ExtentX" VALUE="11218">
<PARAM NAME="_ExtentY" VALUE="7329">
</OBJECT>
</div>
</form>
</body>
</html>

今回はRDFファイルを使用しましたのでMIMEの設定が必要になりました。
また、作成したRDFファイルを削除する仕組みが必要になりました。
もしかしたらもっと良い方法があったかもしれませんが、今回はこういう形になりました。

以上です。わかり辛くて申し訳ありません。
ありがとうございました。
1

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