2011-06-28 13 views
1

期間または特定のクライアントIDに従ってクライアントデータを表示するCrystalレポートがあります。このレポートは2つのサブレポートで構成され、Crystal Report(CR)から実行すると、適切なCRダイアログで受け入れられたパラメータに従って完全に機能します。WebページのCrystalレポートの次のページに移動しようとするときに「オブジェクト参照の例外」

Webページから実行すると、最初のレポートページがReportViewerオブジェクトに正しく表示されます。 SQLプロファイラで確認すると、クエリは適切なパラメータで正しく実行され、最初のサブレポートの1レコードと2番目のサブレポートの2レコードが戻されます。 レポートをクリックして次のページに切り替えると、「オブジェクト参照がオブジェクトのインスタンスに設定されていません。」というメッセージが表示されます。

ここでのReportViewerのためのコード:

_crystalReportViewer.DisplayGroupTree = false; 
_crystalReportViewer.HasCrystalLogo = false; 
_crystalReportViewer.HasDrillUpButton = false; 
_crystalReportViewer.HasToggleGroupTreeButton = false; 
_crystalReportViewer.HasViewList = false; 
_crystalReportViewer.ReportSource = _myReportDocument; 

[...] 

protected void Page_UnLoad (object sender, EventArgs e) 
    { 
     if (_crystalReportViewer != null) 
      _crystalReportViewer.Dispose(); 
     _crystalReportViewer = null; 
    } 

コードすべてをデバッグは罰金です。問題はReportViewerまたはCR自体である可能性がありますが、解決方法を見つけることはできません。あなたは私に助言をくれませんか? ありがとうございます!

答えて

0

Page_UnLoadイベントで問題が発生しました。これは、Cristal Reportの次/前のページボタンがクリックされるたびに呼び出され、ビューアが破棄され、オブジェクト参照例外が発生しました。

私は、ポストバックが発生したかどうかをチェックするために条件を追加しました:

protected void Page_UnLoad (object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 
      if (_crystalReportViewer != null) 
       _crystalReportViewer.Dispose(); 
      _crystalReportViewer = null; 

      if (_myReportDocument != null) 
      { 
       _myReportDocument.Close(); 
       _myReportDocument.Dispose(); 
      } 
      _myReportDocument = null; 

      GC.Collect(); 
     }   
    } 

は、残念ながら、小さな問題がまだ存続:テストマシン上で、すべてが正常に動作しますが、一度DEVマシン上に展開(彼らが持つ2台の異なるサーバーであります明らかに同じ設定)、レポートの最初の2つのレコードだけを表示することができます。次に、CRビューアの「次へ」ボタンをクリックしても何も起こりません。 CRの "Go To"や "Print"のような他の機能は正常に動作します。 データベースの設定が正しいため、レポートとコードは同じです...どんな考えですか?

関連する問題