去掉临时文件夹中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
有些时候,即使在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
{
}
}