Использование Crystal Reports в Visual Studio 2005 (приложение C# .NET для Windows)

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

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

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

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


person Piku    schedule 02.10.2008    source источник


Ответы (9)


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

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

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

Пояснение

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

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. Откройте вкладку «Обозреватель полей» (которая может находиться в меню «Вид») и щелкните правой кнопкой мыши «Поля базы данных».
  2. Нажмите «Данные проекта».
  3. Нажмите «Объекты .NET».
  4. Прокрутите список вниз, чтобы найти свой класс данных (если его нет, скомпилируйте приложение)
  5. Нажмите «>>», а затем ОК
  6. Теперь вы можете перетащить участников класса в отчет и расположить их по своему усмотрению.
person Piku    schedule 10.11.2008
comment
Я нашел еще лучший и более простой способ... набор данных/#comment-27511" rel="nofollow noreferrer">arcanecode.com/2009/02/09/ - person Piku; 19.02.2010

Crystal — один из возможных вариантов создания отчетов. Он существует уже давно и многим нравится.

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

Это хорошая статья о запуске служб отчетов: http://www.simple-talk.com/sql/learn-sql-server/beginning-sql-server-2005-reporting-services-part-1./

person alexmac    schedule 02.10.2008
comment
И какое это имеет отношение к отчетам Crystal, кроме того, что вам это не нравится? - person rball; 10.06.2010

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

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

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

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

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

person mattlant    schedule 03.10.2008

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

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

person Steven A. Lowe    schedule 02.10.2008

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

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

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

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

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

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

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

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

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

AcctStatement oRpt = new AcctStatement() ;
oRpt.Database.Tables[0].SetDataSource(dsRpt.Tables[0]);
oRpt.SetParameterValue("plan_title",sPlanName) ;
crViewer.ReportSource = oRpt ;
person SeaDrive    schedule 02.10.2008

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

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

person Piku    schedule 13.10.2008

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

person Community    schedule 07.10.2010

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

person Kramii    schedule 24.10.2008

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

person Mark Vick    schedule 14.09.2011