2011-06-28 45 views
1

我有一個Crystal報表,根據句點或特定的客戶端ID顯示客戶端數據。該報告由2個子報表組成,如果從Crystal Report(CR)運行,則根據在正確的CR對話框中接受的參數完美工作。嘗試導航到網頁中Crystal報表的下一頁時出現「對象引用異常」

從網頁運行,第一個報告頁面正確顯示在ReportViewer對象中。使用SQL事件探查器進行檢查時,可以使用正確的參數正確執行查詢,爲第一個子報告重新調用1條記錄,爲第二條記錄重新調用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中的下一個/上一個頁面按鈕時,都會調用它,處理Viewer並導致Object Reference異常。

我加了一個條件,以檢查是否回發情況:

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上的「轉到」和「打印」,都能正常工作。 這很奇怪,因爲數據庫設置是正確的,報告和代碼是一樣的...任何想法?

相關問題