遇到这个问题的原因打印次数已经达到了注册表HKEY_LOCAL_MACHINE/SOFTWARE/Crystal Decisions/10.2/Report Application Server/Server 中的PrintJobLimit中设置的75。
解决方法:重启服务器,使打印计数归零。我们可以在程序中加入一个堆栈,每当加载一个报表时入栈,当堆栈中的报表数目达到注册表中的报表最大限制时,清空堆栈。另外在页面Unload时,释放报表资源。代码如下:
using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;
using CrystalDecisions;
using CrystalDecisions.CrystalReports;
using CrystalDecisions.CrystalReports.Engine;
public class ReportFactory
{
private static int MAX_PRINT = 75;
protected static Queue reportQueue = new Queue();
protected static ReportDocument CreateReport(Type reportclass)
{
object report = Activator.CreateInstance(reportclass);
reportQueue.Enqueue(report);
return (ReportDocument)report;
}
public static ReportDocument GetReport(Type reportclass)
{
if (reportQueue.Count >= MAX_PRINT)
{
for (int i = 1; i <= MAX_PRINT; i++)
{
((ReportDocument)reportQueue.Dequeue()).Close();
((ReportDocument)reportQueue.Dequeue()).Dispose();
}
}
return CreateReport(reportclass);
}
}
在加载报表的页面:
protected void Page_Load(object sender, EventArgs e)
{
myReport = new ReportDocument();
myReport = ReportFactory.GetReport(myReport.GetType());
}
protected void Page_Unload(object sender, EventArgs e)
{
if (myReport != null)
{
myReport.Close();
myReport.Dispose();
}
}