在temp文件夹中删除Crystal Report生成的文件 - Visual Studio 2008

时间:2011-07-14 09:37:11

标签: c# vb.net visual-studio-2008 crystal-reports crystal-reports-2008

您好我已经粘贴了一段代码,我正在显示一份报告。我正在使用Visual Studio 2008 Crystal Report引擎。它可以很好地处理这段代码

问题:每次运行报告时,它都会生成一个('。* tmp','。* rpt')文件,通常位于临时文件夹 c:\ windows \ temp < / strong>但是我们可以通过在应用程序池上设置回收来摆脱* .tmp文件,但需要一种方法来摆脱.rpt文件。

找到解决方案:在报表对象上调用关闭() Dispose()。我正在做的方式是crReportDoc.Close()然后crReportDoc.Dispose()

实际问题:如果调用 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 个答案:

答案 0 :(得分:2)

有时即使您在ReportDocument对象上调用dispose后跟GC.Collect(),仍然会清除 Temp 文件夹中的.rpt个文件。没有限制。在Temp文件夹中的.rpt文件之后,CR停止执行进一步的报告请求。

奇怪的是,当你在一个函数或事件处理程序中声明ReportDocument对象时会发生这种情况。

但是,如果您在页面范围的全局上下文中声明ReportDocument,那么当您在Page_Unload()事件中调用Dispose方法时,Crystal会很快清除temp .rpt文件!

答案 1 :(得分:1)

对于CRystal报告版本13及更高版本。清除临时文件。在CrystalReportViewer的Unload事件中调用dispose

protected void crReportViewer_Unload(object sender,EventArgs e)         {             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
        {

        }

    }