2016-08-10 4 views
0

これは、Windows 2000およびIIS3でホストされていたときに使用されていた.NET 2 ASP.Netコードです。Crystal ReportオブジェクトがIsPostBack後にリフレッシュされない

'Page_Loadでは、PostBackでなければキャッシュされたレポートオブジェクトを削除して、後でそのコードを強制的に再構築するようにします。

Win2000とIIS3の場合、Page_Loadでは、Session.Remove( "ReportObject")が呼び出され、Session( "ReportObject")はNothingであり、リロードされます。

最初にすべてのセッションコードを挿入して、Crystal Reportページ要求の間にDBにアクセスしないようにすると、次のページを表示するセッション変数からReportObjectをプルするだけです。

今私はWindows 2003とIIS6に切り替えました。これは、私が本質的にIsPostBackをfalseにしてセッションオブジェクトを削除するようにリンクをクリックしても、常にSAMEレポートを提供します。

私は、以前と同じように動作させることができるIIS6ではいくつかの設定があると考えています。

 Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 

    If Not Page.IsPostBack Then 
     Session.Remove("ReportObject") 
    End If 

    End Sub 

    Sub FillRptParams(ByVal snavcode As String, Optional ByVal CrystalOrPDForEXCEL As String = "") 

    If Not Session("ReportObject") Is Nothing Then 
     bReportCached = True 
    Else    
     bReportCached = False 
    End If 

    oSqlCmd = New SqlCommand 

    If bReportCached Then 
     orpt = Session("ReportObject") 

    Else 
      orpt = New rptUsageSummaryNew 
      oSqlCmd.CommandText = "HOSP_RPT_UsageAllSummary" 

      oDS = oDataAccess.GetReportDataSet(Session("Group"), oSqlCmd) 
      orpt.SetDataSource(oDS) 

      'Cache the report object so we don't have to load it again next time 
      Session.Remove("ReportObject") 
      Session.Add("ReportObject", orpt) 
    End If 

    End Sub 

答えて

0

page_loadイベントではなく、Page_initイベントでコードを移動します。 あなたが「ポストバックコード」を移動したときに、それを抑止します。

+0

こんにちは。ありがとう。 Page_Initは、ページの実行ごとに起動し、Sessionオブジェクトを削除します。 Crystal ReportsのページナビゲーションコントロールをクリックしてSessionオブジェクトをそのままの状態にしておくと、PostBackを検出する必要があります。 –

+0

なぜレポートオブジェクトを再作成する必要がありますか? CRは一度作成されるように設計されてから、キャッシュされてページ間を移動します – Furtiro

関連する問題