2010-07-14 3 views
1

Я разрабатываю приложение в WPF, в котором мне нужно создавать и показывать отчеты. Я использую RDLC для создания и отображения отчетов. Требования к отчетам:Сохранение и повторная загрузка сохраненного отчета rdlc

  1. Должен генерировать и показывать отчет.
  2. Пользователь должен иметь возможность сохранять отчет (они не указали формат для сохранения отчета.)
  3. Пользователь должен иметь возможность загружать и просматривать сохраненный отчет.

Что я сейчас делаю, так это то, что я создаю временный файл PDF из файла RDLC, чтобы показать отчет. Если пользователь хочет сохранить отчет, отчет будет сохранен как PDF, иначе временный файл PDF будет удален. И когда пользователь хочет загрузить сохраненный отчет, он может, так как это формат PDF.

В программе я использую элемент управления winformhost в WPF, чтобы показать отчет. Также используется элемент управления ReportViewer.

Но проблема, с которой я сейчас сталкиваюсь, заключается в том, что показывать отчет довольно медленно, поскольку мы также используем «winformhost» и формат PDF.

Мой вопрос в том, как повысить производительность, если я использую эту логику генерации и отображения отчета в формате PDF? Если это невозможно, есть ли другой способ, с помощью которого я могу сохранять отчет и повторно загружать его, когда захочу, что увеличивает процесс отображения отчета?

Спасибо заранее, Аниш

+0

Я не думаю, что это хорошая идея, чтобы повторно открыть сохраненный отчет в вашем приложении; Лучше попросить пользователя каждый раз регенерировать отчет, чтобы иметь последние данные. Пользователь всегда может сохранять отчет в любом из форматов, поддерживаемых SSRS (pdf, excel, tiff и т. Д.) И открывать его для просмотра снова. – akjoshi

ответ

0

На мой взгляд, вы можете увеличить производительность за счет разделения проблем. Под этим я подразумеваю, что лучше создать набор данных для отчета из вашего пользовательского класса, а не напрямую из БД.

Например, если я хочу, чтобы мой отчет показывал: год заказа - общее количество заказов - клиент. Я создам такой класс, как

class CustomerStatistics 
{ 
    public int OrderYear {get;set;} 
    public int OrderQty {get;set;} 
    public string CustomerName {get;set;} 

} 

После того, как вы это сделаете, вы сможете воспользоваться преимуществами многопоточности. Например, я знаю, что вычисление OrderQty займет некоторое время, поэтому я помещаю его в отдельный поток.

Кроме того, вы можете повысить свою производительность, создав хранимые процедуры для некоторых тяжелых вычислений, в которых вам нужно пройти через большой набор данных. Если это так, вы должны использовать заданные операции, такие как INTERSECT, EXCEPT и т. Д. для оптимизации запросов.

Это были некоторые из моих мыслей.

Cheers.

Смежные вопросы