Мне нужно создавать отчеты в приложении C# .NET для Windows. У меня есть база данных SQL Server 2005, Visual Studio 2005, и я вполне могу создавать хранимые процедуры и наборы данных.
Может кто-нибудь указать мне правильное направление для создания отчетов? Я просто не могу с этим справиться. Некоторые примеры были бы хорошим началом или простым практическим руководством ... все, что действительно объясняется немного лучше, чем документы MSDN.
Я использую элемент управления CrystalDecisions.Windows.Forms.CrystalReportViewer для отображения отчетов, я полагаю, это правильно.
Если я собираюсь отправиться в долгое и сложное путешествие, каков самый простой способ создавать и отображать отчеты, которые также можно распечатать?





Crystal - один из возможных вариантов создания отчетов. Он существует уже давно, и многим он, кажется, нравится.
Возможно, вы захотите взглянуть на службы отчетов SQL. Я использовал оба, но предпочитаю службы отчетов SQL. Он довольно хорошо интегрирован в студию и работает аналогично другим проектам Microsoft. Это также бесплатно с sql express и т. д.
Это хорошая статья о том, как начать работу с отчетами: http://www.simple-talk.com/sql/learn-sql-server/beginning-sql-server-2005-reporting-services-part-1/
Я вторая рекомендация Алексея взглянуть на службы отчетов sql - если у вас есть лицензия разработчика sql, то у вас, вероятно, уже есть службы отчетов
Мне не нравятся кристальные отчеты, слишком много утомления в дизайнере (все время редактируют выражения), слишком много проблем с развертыванием сервера (проверьте эти файлы лицензий!)
Я использую Кристалл. Я кратко опишу свой метод, но имейте в виду, что я магазин одного человека, и он может не подойти для вашей среды.
Сначала создайте форму с помощью CR Viewer. Затем:
1) Выясните, какие данные вам нужны, и создайте представление, которое извлекает нужные столбцы. 2) Создайте новый отчет Crystal с помощью мастера, указав ваше представление в качестве источника данных. 3) Перетаскивайте, вставляйте, удаляйте и т. д., Чтобы придать отчету форму. Да, это утомительно. 4) Создайте необходимую кнопку или что-то еще и создайте функцию для создания отчета. 5) Получите данные в DataTable (возможно, в DataSet). Вам не обязательно использовать представление. 6) Создайте объект отчета. Установите DataTable как DataSource. Назначьте объект отчета программе просмотра CR. Это одна из частей, для которой есть примеры.
Комментарии:
Если вы потеряете окно с полями базы данных и т. д. (Field Explorer), перейдите в View / Document Outline. (Это моя фантазия - иметь Билла Гейтса на сцене и просить его найти ее.)
Причина настройки представления заключается в том, что если вы хотите добавить столбец, вы пересматриваете представление, и проводник полей обновляется автоматически. У меня было много проблем с другими способами. Этот метод также является обходным решением для ошибки, которая требует сканирования всех таблиц, сбрасывая, на какую таблицу они указывают. Вы хотите передать Кристалл один стол. Вы не должны пытаться заставить Crystal присоединиться к столам и т. д. Я не говорю, что это не работает; Я говорю, что это сложнее.
Документация по VS-реализации Crystal на веб-сайте Business Objects есть (или была), но я считаю, что она исчезла за экраном регистрации / входа в систему. (Я мог бы вынести больше информации по этому поводу.)
У меня были проблемы с переводом Crystal на разрыв страницы, когда я хочу, и не на разрыв страницы, когда я не хочу, и т. д. Это далеко не лучший составитель отчетов, который я когда-либо использовал, и я не понимаю, почему он, кажется, поставил так много других не у дел. Кроме того, с их политикой лицензирования очень трудно справиться в небольшой, подвижной организации.
Отредактировано, чтобы добавить пример:
AcctStatement oRpt = new AcctStatement() ;
oRpt.Database.Tables[0].SetDataSource(dsRpt.Tables[0]);
oRpt.SetParameterValue("plan_title",sPlanName) ;
crViewer.ReportSource = oRpt ;
Вы можете использовать средство просмотра отчетов с отчетами на стороне клиента, встроенными в vs.net (элемент управления ReportBuilder / ReportViewer). Вы можете создавать отчеты так же, как и для служб отчетов sql, за исключением того, что вам не нужен сервер sql (или asp.net). Кроме того, у вас есть полный контроль над ними (как вы представляете, как вы собираете данные, на каком уровне они создаются, что вы делаете с ними после генерации, например, отправляете их по почте, отправляете на ftp и т. д.). Вы также можете экспортировать в PDF и Excel.
И в вашем случае, когда вы создаете отчет на основе данных и пользовательского ввода, это может отлично сработать, поскольку вы можете создавать свой собственный источник данных и данные по мере продвижения. Когда ваши данные будут готовы к отчету, привяжите их к своему отчету.
Отчеты можно легко построить в Visual Studio 2005 (добавить отчет в свой проект) и отобразить в приложении Winforms с помощью элемента управления ReportViewer.
Вот отличная книга, которую я рекомендую всем посмотреть, если вы заинтересованы в отчетах на стороне клиента. Он дает много полезной информации и множество различных сценариев и способов использования отчетов на стороне клиента.
Я обнаружил, что следующие веб-сайты решили мои проблемы. Включено сюда для использования в будущем.
Руководства по объектной модели CrystalReportViewer за руководство о том, как заставить все это работать. А также Настройка проекта для использования Crystal Reports и, в частности, подготовка формы и добавление контроля
Я настоятельно рекомендую попробовать альтернативное решение для отчетности - у меня большой опыт работы с Crystal, и мне удалось проделать с ним несколько забавных вещей в .Net, но, честно говоря, интеграция Crystal и .Net - абсолютная свинья для всего, кроме простейшие случаи.
Теперь мне удалось это сделать.
Краткий обзор
Он работает, имея «класс данных», который представляет собой обычный класс 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 соответствует одной «строке» в готовом отчете.
Первый элемент в списке может также содержать данные заголовка отчета, а последний элемент в списке может содержать данные нижнего колонтитула отчета. И поскольку это ArrayList, для доступа к ним можно использовать обычный доступ к Array:
((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;
Теперь вам нужно привязать свой класс данных к самому отчету. Вы делаете это внутри дизайнера:
Я нашел способ еще лучше и проще ... arcanecode.com/2009/02/09/…
я думаю, это может вам помочь http://infynet.wordpress.com/2010/10/06/crystal-report-in-c/
Я пробовал RS. Я перехожу с RS обратно на Crystal. RS слишком тяжелый и медленный (или что-то в этом роде). Нет причин ждать 30 секунд, пока отчет отобразится, - это RS, если Crystal сделает это менее чем за секунду.
И какое отношение это имеет к отчетам Crystal, кроме того, что вы этого не предпочитаете?