5

こんにちは、私はレポートを表示しているコードの下に貼り付けました。私はVisual Studio 2008 Crystal Reportエンジンを使用しています。これは、コードの一部を持つすべての良い働き一時的なフォルダ内のCrystal Report生成ファイルを取り除く - Visual Studio 2008

問題:\ WINDOWS:は毎回レポートが実行されている、それは(「*はRPTは」「* TMP」、)一時フォルダCで、通常のファイルを生成\ tempしかし、アプリケーションプールでリサイクルを設定することで* .tmpファイルを取り除くことができますが、.rptファイルを取り除く方法が必要です。レポートオブジェクトのコール閉じる()のDispose():ソリューションが見つかり

。私がやっている方法はcrReportDoc.Close(ある)、その後crReportDoc.Dispose()

実際の問題:もし処分()はレポートがに設定されていない、次のエラー「オブジェクト参照を思い付くと呼ばれていますオブジェクトのインスタンス '

私がプログラミングに新しくなったので、仲間のひとりが解決策を助けてくれるか本当に感謝します。

おかげ

 Dim crReportDoc = New CrystalDecisions.CrystalReports.Engine.ReportDocument   
     crReportDoc = Session("ReportDocument") 
     ReportViewer.DisplayToolbar = True 
     ReportViewer.EnableDrillDown = True 
     ReportViewer.DisplayGroupTree = False 
     ReportViewer.Visible = True 
     ReportViewer.DisplayToolbar = True 
     ReportViewer.ReportSource = crReportDoc 

答えて

2

それでものTempフォルダ内の.rptのファイルがクリーンアップされないGC.Collect()続くあなたのReportDocumentオブジェクトの処分を呼び出すにもかかわらず、いくつかの回。そして、それには限界があります。 .rptのTempフォルダ内にあるファイルを削除し、その後、CRはそれ以降のレポート要求の実行を停止します。

これは、ReportDocumentオブジェクトを関数またはイベントハンドラの横に宣言すると、不思議です。あなたはPage_Unload()イベントでDisposeメソッドを呼び出したときに喜ん

しかし、あなたはページ全体のグローバルコンテキストであなたのReportDocumentをを宣言した場合、その後結晶レポートは一時.RPTファイルのクリーン!!!!

1

CRystalレポートバージョン13以上の場合。一時ファイルを消去する。 CrystalReportViewerのUnloadイベントで処分を呼び出し

保護無効crReportViewer_Unload(オブジェクト送信者、EventArgsの電子) { CloseReport(); }

/// <summary> 
    /// This method is used to clear the temporary files created by Crystal Reports 
    /// </summary> 
    protected void CloseReport() 
    { 
     try 
     { 
      if(cryRpt != null) 
      { 
       Sections objSections = cryRpt.ReportDefinition.Sections; 
       foreach (Section objSection in objSections) 
       { 
        ReportObjects objReports = objSection.ReportObjects; 
        foreach(ReportObject rptObj in objReports) 
        { 
         if(rptObj.Kind.Equals(CrystalDecisions.Shared.ReportObjectKind.SubreportObject)) 
         { 
          SubreportObject subreportObject = (SubreportObject)rptObj; 
          ReportDocument subReportDocument = subreportObject.OpenSubreport(subreportObject.SubreportName); 
          subReportDocument.Close(); 
         } 
        } 
       } 
       cryRpt.Close(); 
       cryRpt.Dispose(); 
      } 
      if(crReportViewer != null) 
      { 
       crReportViewer.ReportSource = null; 
       crReportViewer.Dispose(); 
      } 
     } 
     catch 
     { 

     } 

    } 
関連する問題