Как управлять изменениями в отчетах в .NET? - PullRequest
4 голосов
/ 13 мая 2010

Мне нужно предложить возможность просматривать и распечатывать отчеты из приложения .NET. Но мне нужно иметь возможность изменять шаблоны отчетов без необходимости перекомпиляции приложения. Я вижу, что есть 2 варианта:

  1. использовать компонент отчетности, такой как Microsoft.Reporting или Crystal Reports, который использует .rpt (или аналогичный) файл, который могут быть изменены без необходимости необходимость перекомпилировать приложение
  2. используйте System.Drawing.Printing и сохраняйте данные шаблона в базе данных, что упрощает работу и избегает проблем громоздких компонентов отчетности

Работает ли вариант 1 и не требует ли повторная компиляция приложения?

Возможен ли вариант 2? Как бы вы сохранили данные шаблона в базе данных, чтобы их можно было изменить без повторной компиляции приложения?

РЕДАКТИРОВАТЬ: с Вариантом 1, вам нужно определить «источники данных» до компиляции?

Ответы [ 5 ]

2 голосов
/ 24 мая 2010

Я никогда не работал с ранее упомянутыми механизмами Microsoft Report, поэтому ничего не могу о них сказать.

Я получил очень хороший опыт использования combit List & Label . Это шаблон на основе отчета (ваши отчеты могут развиваться независимо от вашего приложения). Все, что вам нужно сделать, это передать данные для ваших отчетов (он поддерживает источники объектов и DataTable) и сообщить ему, какой шаблон использовать.

List & Label включает в себя отличный дизайнер отчетов, который вы можете распространять вместе с вашим приложением, имеет готовые к использованию компоненты предварительного просмотра и поддерживает печать PDF из коробки.

С точки зрения обслуживания, есть только одна вещь, о которой вам нужно позаботиться: изменение схемы источника данных. ломает уже развернутый отчет шаблоны, вы не можете автоматически перенести их.

Кроме того, и ценник (я думаю, что он составляет около 1,5 тыс., Но это лицензия разработчика, что означает, что вы можете развернуть его с таким количеством приложений для любого количества пользователей), это очень гибкое и надежное решение.

2 голосов
/ 13 мая 2010

По моему мнению и исходя из моего опыта, Crystal Reports - это кошмар обслуживания. Я считаю, что для сохранения этих отчетов в течение всей их жизни требуется больше усилий, чем для создания. Это старый продукт DOS, который был взломан слишком много раз.

Мне действительно нравятся отчеты Microsoft. Легко создавать и легко поддерживать. Мне особенно нравятся автономные отчеты (rdlc), которые устраняют необходимость в службах Sql Server Reporting Services. (Я не уверен, что последнее предложение технически правильно, но вы поняли.)

Я использовал System.Drawing.Printing для простой печати информации, отображаемой пользовательским интерфейсом. (Простой включает в себя несколько страниц по горизонтали и по горизонтали.) Я всегда рассматриваю отчеты Microsoft прежде, чем писать код. Тем более, что пользователи всегда меняют то, что хотят, когда видят реальный отчет. Следовательно, кодирование может потребовать значительных усилий. Вот почему я обычно делаю только информацию пользовательского интерфейса, такую ​​как списки, формы или другую четко определенную информацию, где я могу использовать существующие методы элемента управления "draw-to-bitmap".

У меня нет опыта работы с "шаблоном отчета". Microsoft rdl и rdlc являются файлами XML. Поэтому ими легко манипулировать и хранить. У вас не должно возникнуть проблем с хранением XML в базе данных, в файловой системе или в качестве ресурса. Я сохранил двоичные книги Microsoft Excel в виде файлов ресурсов, изменил их на основе пользовательских критериев, а затем открыл их в Excel в качестве шаблонов. Если я могу сделать это для Excel, отчет должен быть простым.

Я не знаю о более поздних версиях Crystal Reports, но изменение макета и полей данных отчетов более старых версий во время выполнения было от невозможного до невыносимо трудного. Я сделал это однажды несколько лет назад. Я не мог добавить или удалить поля, поэтому мне пришлось включить все поля, а затем скрыть / показать каждое поле по мере необходимости. Это затрудняло проектирование отчета из-за всех статических полей. Я думаю, что мог бы закодировать отчет вручную быстрее, чем это потребовалось для создания отчета через Crystal Reports.

Crystal Reports - это отдельное развертывание и установка. Есть проблемы с лицензированием, о которых вам нужно прочитать. Отчеты Microsoft являются частью .NET Framework.

Это мои два цента. Я настоятельно рекомендую вам избегать Crystal Reports. Мне действительно нравятся отчеты Microsoft. Я не могу дать рекомендации другим системам отчетов, но я слышал хорошие отзывы об ActiveReports и ComponentOne. Microsoft также предоставляет бесплатную библиотеку графиков. (Поиск по загрузке MSDN.)

0 голосов
/ 15 мая 2010

Опция № 1 определенно работает с форматом RPX ActiveReports. См. эту страницу для получения дополнительной информации. Действительно, ActiveReports более «громоздкий», чем никакой компонент, но гибкость развертывания xcopy и крошечные библиотеки DLL делают его менее громоздким, чем большинство.

Scott Willeke
GrapeCity
0 голосов
/ 13 мая 2010

Ваш # 1 - это «хост для компонента, который отображает документы» - так что все должно быть в порядке. Если вы размещаете MSWord в своем приложении, изменение файла .doc не означает, что вам придется перестраивать приложение. Это был бы тот же принцип.

# 2 выполнимо, но, поскольку вы, очевидно, делаете что-то достаточно сложное, чтобы рассмотреть Crystal Reports или ReportViewer, это, вероятно, нежизнеспособно. По сути, вы предлагаете написать свою собственную более простую (и не совсем понятную) версию Crystal. Если у вас нет действительно веской причины поступить иначе, я бы остановился на готовом решении.

0 голосов
/ 13 мая 2010

Вы можете добавить свой отчет в виде файла .rdlc (выберите Отчет в качестве нового элемента в Visual Studio) и использовать Winforms.ReportViewer (это ваш вариант 1 ... Я думаю, кроме не хрустальный). Никаких сторонних компонентов, все это встроено в .NET. На мой взгляд, с ними проще работать, чем с Crystal, для базовых отчетов. Работа с .rdlc имеет некоторые недостатки, но затем и Crystal. Но поскольку он запекается, его, конечно, легче развернуть, чем Crystal.

Файл шаблона отчета сохраняется с расширением .rdlc, но на самом деле это всего лишь XML, и вы можете указать, что он находится за пределами скомпилированного приложения. Конечно, вы можете изменить файл XML без перекомпиляции. Наши приложения настроены таким образом, потому что, как и вы, нам нужно было разрешить изменение.

Изменение XML позволяет вам полностью контролировать изменение макета отчета и / или данных. Узел DataSets в XML указывает объекты данных, которые, как ожидается, будет добавлен в отчет. Поэтому, если вы хотите отправить в отчет данные совершенно другого типа, тогда да, это возможно, переписав этот узел. Недопустимо любое несоответствие между тем, что вы отправляете в отчет, и тем, что он ожидает получить. Это единственное, что делает его еще более беспокойным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...