Избавьтесь от сгенерированных файлов Crystal Report во временной папке - Visual Studio 2008 - PullRequest
5 голосов
/ 14 июля 2011

Привет, я вставил ниже кусок кода, где я показываю отчет.Я использую Visual Studio 2008 Crystal Report Engine.Все хорошо работает с куском кода

Проблема: Каждый раз, когда запускается отчет, он генерирует ('. * Tmp', '. * Rpt') файлы, как правило, во временном режиме.папка c: \ windows \ temp , однако мы можем избавиться от файлов * .tmp, установив recycle в пуле приложений, но нам нужен способ избавиться от файлов .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

Ответы [ 2 ]

2 голосов
/ 23 апреля 2012

Иногда, даже если вы вызываете dispose для вашего объекта ReportDocument, а затем GC.Collect(), файлы .rpt в папке Temp не очищаются. И нет предела нет. .rpt файлов в папке Temp, после чего CR прекращает выполнение дальнейших запросов отчета.

Странно, но это происходит, когда вы объявляете свой объект ReportDocument рядом с функцией или обработчиком события.

Но если вы объявите свой ReportDocument в глобальном контексте Page , тогда Crystal Reports удачно очистит временные файлы .rpt при вызове метода Dispose в событии Page_Unload() !!!!

1 голос
/ 18 октября 2016

Для отчетов CRystal версий 13 и выше.Очистить временные файлы.Вызовите удаление в событии Unload CrystalReportViewer

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
        {

        }

    }
...