Страница 1 из 2

Проблемы большого отчета!

Добавлено: 30 дек 2014, 13:35
kin123456789
Добрый день ! подскажите, как лучше решить проблему: Создается большой отчет (200-250 страниц), при report.Render() происходит длительное зависание! Как устранить это зависание! Спасибо!

Re: Проблемы большого отчета!

Добавлено: 30 дек 2014, 13:59
kin123456789
В данном случае необходимо реализовать обработку в другом потоке! Может уже есть варианты данной реализации! Для визуализации длительной операции используется viewer.progress.SetLabelProgress, однако при report.Render() он зависает и не обновляется! Спасибо!

Re: Проблемы большого отчета!

Добавлено: 31 дек 2014, 07:53
Anton Lozovskiy
Здравствуйте,

Готовых вариантов нету. Вы можете попробовать рендеринг через BackgroundWorker, возможно он сможет помочь.

Спасибо.

Re: Проблемы большого отчета!

Добавлено: 31 дек 2014, 08:36
kin123456789
Здравствуйте! Это вариант и использую, но выдает ошибку на строке report.Render() - осуществляется многопоточный доступ!

Re: Проблемы большого отчета!

Добавлено: 31 дек 2014, 08:49
Anton Lozovskiy
Здравствуйте,

Других вариантов пока предложить не можем. Возможно есть ограничение в самом Silvelight.

Спасибо.

Re: Проблемы большого отчета!

Добавлено: 25 мар 2015, 12:06
kin123456789
Здравствуйте!
Есть код:

Код: Выделить всё

 void CreateReport()
 { 
   StiReport report = new StiReport();
    report.Load(reportTemplate.ReportInf);
   report.RegBusinessObject("paymentsByRegDate", "paymentsByRegDate", paymentsByRegDate);   
   worker.RunWorkerAsync(report);
}
 void worker_DoWork(object sender, DoWorkEventArgs e)
       {
           StiReport report= (StiReport)e.Argument;
          
           report.Render();  // в этой строке вылетает Exception Недопустимый межпотоковый доступ.
            // Инициализатор типа "Stimulsoft.Report.SL.Helpers.StiFontHelper" выдал исключение.
       }

       void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
       {
         viewer.Report = (StiReport)e.Result;
       }
Спасибо!

Re: Проблемы большого отчета!

Добавлено: 25 мар 2015, 12:47
Anton Lozovskiy
Здравствуйте,

Класс StiFontHelper используется для того, чтобы расчитывать точный размер, который нужен для вывода текста.
Для этого используется компонент TextBlock. В сильверлайте другого способа просто нету, и исключить этот код мы никак не можем.
Поэтому советуем не использовать worker для рендеринга отчета. Конешно главный поток немного подвисает, если отчет занимает длительное время на построение - но по другому никак.

Спасибо.

Re: Проблемы большого отчета!

Добавлено: 25 мар 2015, 12:59
kin123456789
Спасибо! Данная ошибка выдается всегда, когда осуществляется регистрация бизнес-объектов в отчете!

Re: Проблемы большого отчета!

Добавлено: 25 мар 2015, 13:26
kin123456789
Так все-таки проблема именно в классе StiFontHelper?

Re: Проблемы большого отчета!

Добавлено: 25 мар 2015, 14:21
kin123456789
в отчетах нужно просто убрать свойство "Может расти". Все работает только отчеты стали с обрезанными значениями в полях!