去掉临时文件夹中Crystal Report生成的文件-Visual Studio 2008

本文关键字:文件 -Visual 2008 Studio Report 文件夹 Crystal | 更新日期: 2023-09-27 18:02:08

嗨,我在一段代码下面粘贴了一个报告。我使用的是Visual Studio 2008 Crystal Report引擎。它与代码一起工作

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

找到的解决方案:对报表对象调用Close((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

去掉临时文件夹中Crystal Report生成的文件-Visual Studio 2008

有些时候,即使在ReportDocument对象上调用dispose,然后调用GC.Collect()Temp文件夹中的.rpt文件仍不会被清理。Temp文件夹中.rpt文件的数量有限制,在此之后CR将停止执行进一步的报告请求。

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

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

适用于CRystal Report 13及以上版本。清除临时文件。在CrystalReportViewer的卸载事件中调用dispose

protected void crReportViewer_Unload(对象发送方,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
        {
        }
    }