Использование Crystal Reports в Visual Studio 2005 (приложение C # .NET для Windows) - PullRequest
9 голосов
/ 03 октября 2008

Мне нужно создавать отчеты в приложении C # .NET для Windows. У меня есть база данных SQL Server 2005, Visual Studio 2005, и я вполне могу создавать хранимые процедуры и наборы данных.

Может кто-нибудь указать мне правильное направление для создания отчетов? Я просто не могу понять это. Некоторые примеры могут быть хорошим началом или простым руководством с практическими рекомендациями ... все, что действительно немного лучше, чем документы MSDN.

Я использую элемент управления CrystalDecisions.Windows.Forms.CrystalReportViewer для отображения отчетов, полагаю, это правильно.

Если я собираюсь отправиться в долгое и сложное путешествие, каков самый простой способ создания и отображения отчетов, которые также можно распечатать?

Ответы [ 9 ]

4 голосов
/ 10 ноября 2008

Мне удалось сделать эту работу сейчас.

Краткий обзор

Он работает, имея «класс данных», который является обычным классом C #, содержащим переменные и без кода. Затем он создается и заполняется данными, а затем помещается в ArrayList. ArrayList привязан к средству просмотра отчетов вместе с именем загружаемого отчета. В конструкторе отчетов используются «.Net объекты», а не связь с базой данных.

Объяснение

Я создал класс для хранения данных для моего отчета. Этот класс заполняется мной вручную путем ручного извлечения данных из базы данных. Как это сделать, не имеет значения, но вот пример:

DataSet ds = GeneratePickingNoteDataSet(id);
foreach (DataRow row in ds.Tables[0].Rows) {
    CPickingNoteData pickingNoteData = new CPickingNoteData();

    pickingNoteData.delivery_date = (DateTime)row["delivery_date"];
    pickingNoteData.cust_po = (int)row["CustomerPONumber"];
    pickingNoteData.address = row["CustomerAddress"].ToString();
    // ... and so on ...

    rptData.Add(pickingNoteData);
}

Затем класс помещается в ArrayList. Каждый элемент массива соответствует одной «строке» в готовом отчете.

Первый элемент в списке также может содержать данные заголовка отчета, а последний элемент в списке может содержать данные нижнего колонтитула отчета. А поскольку это ArrayList, для доступа к ним можно использовать обычный доступ к массиву:

((CPickingNoteData)rptData[0]).header_date = DateTime.Now;
((CPickingNoteData)rptData[rptData.Count-1]).footer_serial = GenerateSerialNumber();

Как только у вас будет массив данных, полный данных, привяжите его к вашей программе просмотра отчетов следующим образом, где «rptData» имеет тип «ArrayList»

ReportDocument reportDoc = new ReportDocument();
reportDoc.Load(reportPath);
reportDoc.SetDataSource(rptData);
crystalReportViewer.ReportSource = reportDoc;

Теперь вам нужно привязать ваш класс данных к самому отчету. Вы делаете это внутри дизайнера:

  1. Откройте вкладку Field Explorer (которая может быть в меню «Вид») и щелкните правой кнопкой мыши «Поля базы данных»
  2. Нажмите «Данные проекта»
  3. Нажмите «Объекты .NET»
  4. Прокрутите список вниз, чтобы найти свой класс данных (если его там нет, скомпилируйте ваше заявление)
  5. Нажмите «>>» и затем OK
  6. Теперь вы можете перетаскивать учеников на отчет и организовать их как хочешь.
3 голосов
/ 03 октября 2008

Crystal - один из возможных вариантов создания отчетов. Это было давно, и многим людям это нравится.

Возможно, вы захотите взглянуть на службы отчетов SQL. Я использовал оба, но я предпочитаю службы отчетов SQL. Он довольно хорошо интегрирован в студию и работает аналогично другим проектам Microsoft. Его также бесплатно с sql express и т. Д.

Это хорошая статья о начале предоставления отчетов: http://www.simple -talk.com / SQL / учиться-SQL-сервер / начала-SQL-сервер-2005-отчетность-услуг части-1 /

2 голосов
/ 03 октября 2008

Вы можете использовать средство просмотра отчетов со встроенными в vs.net отчетами на стороне клиента (элемент управления ReportBuilder / ReportViewer). Вы можете создавать отчеты так же, как и для служб отчетов SQL, за исключением того, что вам не нужен сервер SQL (или asp.net). Кроме того, вы имеете полный контроль над ними (как вы представляете, как собираете данные, в каком слое они генерируются, что вы делаете с ними после генерации, например, отправляете их по почте, отправляете в ftp и т. Д.). Вы также можете экспортировать в формате PDF и Excel.

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

Отчеты можно легко создавать в Visual Studio 2005 (добавить отчет в проект) и отображать в приложении Winforms с помощью элемента управления ReportViewer.

Вот отличная книга, которую я рекомендую всем посмотреть, если заинтересованы в отчетах на стороне клиента. Он дает много полезной информации и множество различных сценариев и способов использования отчетов на стороне клиента.

http://www.apress.com/book/view/9781590598542

1 голос
/ 07 октября 2010

я думаю, что это может вам помочь http://infynet.wordpress.com/2010/10/06/crystal-report-in-c/

1 голос
/ 13 октября 2008

Я обнаружил, что следующие сайты решили мои проблемы. Включено здесь для дальнейшего использования.

Учебники по объектной модели CrystalReportViewer для учебника о том, как заставить все это работать. А также Настройка проекта для использования Crystal Reports и конкретно подготовка формы и добавление контроля

1 голос
/ 03 октября 2008

Я использую Кристалл. Я кратко опишу свой метод, но учтите, что я работаю в одном магазине, и он может не соответствовать вашей среде.

Сначала создайте форму с помощью CR Viewer. Тогда:

1) Определите, какие данные вам нужны, и создайте представление, которое извлекает нужные столбцы. 2) Создайте новый отчет Crystal с помощью мастера, предоставив представление в качестве источника данных. 3) Перетащите, вставьте, удалите и все, что угодно, чтобы придать отчету форму. Да, это утомительно. 4) Создайте необходимое нажатие кнопки или что-то еще, и создайте функцию, в которой нужно сгенерировать отчет. 5) Извлечение данных в DataTable (возможно, в DataSet). Вам не нужно использовать вид. 6) Создайте объект отчета. Установите DataTable в качестве источника данных. Назначьте объект отчета в CR Viewer. Это одна часть, для которой есть примеры.

Комментарии:

Если вы потеряете окно с полями базы данных и т. Д. (Field Explorer), перейдите к View / Document Outline. (Моя фантазия - пригласить Билла Гейтса на сцену и попросить его найти его.)

Причиной настройки представления является то, что если вы хотите добавить столбец, вы пересматриваете представление, и Field Explorer автоматически обновляется. У меня были разные проблемы, когда я делал это другими способами. Этот метод также является обходным решением для ошибки, которая требует сканирования всех таблиц, сбрасывая, на какую таблицу они указывают. Вы хотите передать Кристалл один стол. Вы не хотите пытаться заставить Crystal присоединиться к столам и т. Д. Я не говорю, что это не работает; Я говорю, что это сложнее.

На веб-сайте Business Objects есть (или была) документация по реализации Crystal для VS, но я считаю, что она исчезла за экраном регистрации / входа в систему. (Я мог бы вынести больше информации об этом сам.)

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

Отредактировано, чтобы добавить пример:

AcctStatement oRpt = new AcctStatement() ;
oRpt.Database.Tables[0].SetDataSource(dsRpt.Tables[0]);
oRpt.SetParameterValue("plan_title",sPlanName) ;
crViewer.ReportSource = oRpt ;
1 голос
/ 03 октября 2008

Я рекомендую Алексу взглянуть на службы отчетов SQL - если у вас есть лицензия разработчика SQL, у вас, вероятно, уже есть службы отчетов

Мне не нравятся отчеты Crystal Reports, слишком много утомительного труда в конструкторе (все время редактируются выражения), слишком много проблем с развертыванием сервера (проверьте файлы лицензий!)

0 голосов
/ 14 сентября 2011

Я попробовал RS. Я перевожу из РС обратно в Кристалл. RS слишком тяжелый и медленный (или что-то в этом роде). Нет смысла ждать 30 секунд, чтобы отчет был обработан RS, если Crystal делает это за секунду.

0 голосов
/ 24 октября 2008

Я настоятельно рекомендую попробовать альтернативное решение для составления отчетов - у меня большой опыт работы с Crystal, и я смог сделать с ним несколько прикольных вещей в .Net, но, честно говоря, интеграция Crystal и .Net является абсолютной идеей для все, кроме самых простых случаев.

...