Как создать отчет в visual studio
Современные приложения предоставляют множество способов доступа к интересующей пользователя информации. Для работы с данными разрабатываются специализированные программы. Обычные офисные средства, такие, как Microsoft Office, содержат интегрированные возможности для извлечения данных. В конечном счете всегда можно попросить администратора извлечь из базы данных ту информацию, которая в данный момент необходима пользователю.
Тем не менее наиболее распространенным и привычным способом работы с разнообразной информацией остается традиционная отчетная форма. С одной стороны, многие пользователи, особенно старшего поколения, все еще не находят в себе сил отказаться от стандартной бумажной формы представления отчета. С другой стороны, отчет - это прежде всего средство консолидации информации, зачастую различной специфики.
Построение отчетов
Основное назначение компонентов CRVS - поддержка разработки отчетной функциональности приложения. Предполагается, что в соответствии с требованиями будет разработан специализированный шаблон отчета - файл с расширением .rpt, задающий размещение данных на странице отчета (рис. 1). Кроме того, шаблон указывает, какие структуры данных служат источником для данных отчета. В дальнейшем шаблон передается на вход компонентам CRVS, которые извлекают данные из источника и на их основании формируют структуру итогового отчета. Для отображения отчета служит специальная программа просмотра (viewer), которая встраивается в разрабатываемое приложение (поддерживаются как Web-, так и Windows-приложения).
Как говорилось выше, компоненты CRVS можно использовать для разработки как Web-ориентированных, так и обычных Windows-приложений, называемых в последнее время модным словом "умные" (smart) приложения. С точки зрения работы с данными компоненты Crystal Reports можно использовать в двух режимах работы - Push Model и Pull Model.
Pull Model - запрос данных по требованию. В этом случае шаблон отчета, передаваемый компонентам Crystal Reports, берет на себя работу, связанную с извлечением данных из источника. Данный подход весьма эффективен для отображения многостраничных отчетов, так как при этом из источника извлекаются только данные для отображаемых страниц.
Кроме формирования и отображения отчета, компоненты CRVS поддерживают экспорт полученных данных в форматы PDF, HTML, XLS, RTF и DOC, который может выполняться программно, что позволяет полностью скрыть использование приложением компонентов Crystal Reports. В этом случае приложение может создавать необходимые файлы отчетов прямо в каталоге файловой системы. Это очень удобно для пакетного режима создания файлов отчетов, когда пользователю нужно сформировать группу отчетов без их предварительного просмотра для последующей передачи результатов заинтересованным лицам.
Несмотря на то что архитектура компонентов CRVS позволяет организовать сценарий многоуровневого распределения процессов формирования итогового отчета, все же данный продукт не подходит для организации всего цикла управления отчетами. Для решения этой задачи предназначена платформа MSRS*.
Пример использования
В качестве примера посмотрим, во что обойдется реализация простого отчета, содержащего одну таблицу. Представим себе, что существует база данных Microsoft SQL Server, содержащая данные о текущем уровне технических знаний персонала. Для каждого сотрудника в базе хранится список технологий, которыми он владеет, а также уровень владения ими. Уровень владения отражается с помощью одной из двух оценок: самооценки (данной сотрудником самому себе) и "оценки 360", полученной в результате опроса людей, работающих совместно с этим сотрудником.
- эксперт в данном вопросе - консультирует своих коллег;
- есть опыт использования - владеет технологией, использует ее в работе;
- есть знания, достаточные для использования, - хорошее знакомство с технологией;
- знаком - знакомство с технологией, понимание того, что она собой представляет;
- не знаком - отсутствие знакомства с технологией.
Задача состоит в следующем: руководителю предприятия необходимо узнать, кто из сотрудников лучше всего знаком с Microsoft Project - широко известным продуктом для планирования. Список сотрудников нужно отсортировать в порядке убывания знаний. Для упрощения задачи используем режим Push Model, т. е. в качестве отправной точки возьмем готовую структуру данных (DataSet).
Создание отчета начинается с подготовки его шаблона. Для этого воспользуемся "Дизайнером отчетов" (рис. 2). Чтобы получить связь с данными в источнике, следует импортировать структуру данных в шаблон отчета. После этого в левой верхней панели мы увидим структуру, а также набор полей, который в нее входит. Размещая поля на странице отчета, мы связываем данные в источнике с их размещением в шаблоне отчета. Для конструирования сложных отчетов можно использовать элементы управления, расположенные на левой нижней панели.
Рис. 2. Создание отчета при помощи "Дизайнера отчетов" Crystal Reports. |
В результате работы "Дизайнера отчетов" получается файл с расширением .rpt, содержащий созданный дизайн шаблона отчета. Для отображения отчета следует включить в состав приложения программу просмотра, называемую CrystalReportViewer и находящуюся в пространстве имен CrystalDecisions.Web - для Web-приложений и CrystalDecisions.Windows.Forms - для Windows-приложений.
- создать программное представление отчета на основании его шаблона (ReportDocument);
- заполнить данными структуру DataSet и передать ее ReportDocument с помощью метода SetDataSource;
- отобразить отчет в программе просмотра (выполняется это с помощью указания свойству ReportSource объекта ReportDocument).
При отображении отчета обозреватель использует компоненты CRVS, структуру данных и шаблон для отображения готового отчета (рис. 3).
Рис. 3. Вид готового отчета (вариант для Web-приложения). |
Продукты Crystal Reports
С момента своего выхода на рынок в начале 90-х годов программа Crystal Reports заняла лидирующие позиции в сегменте средств формирования отчетов и удерживает их по сей день. Во многом этот успех обеспечен долголетним сотрудничеством ее разработчика (сначала Crystal Services, потом Crystal Decisions) с ведущими поставщиками средств разработки и СУБД: еще в середине 90-х OEM-версия Crystal Reports входила в состав почти 150 продуктов нескольких десятков производителей (Microsoft, Borland, Sybase и т. п.) и уже давно стала стандартом де-факто для Windows-разработчиков. За 10 лет присутствия Crystal Reports на рынке было продано более 4 млн лицензий.
Microsoft Reporting Services
Управление отчетами
Не секрет, что основу множества программных систем составляет ядро, предназначенное для хранения данных. Использование в его качестве промышленной СУБД обеспечивает будущей системе надежный фундамент, неотъемлемую часть успешной разработки. Этот подход - построение продукта вокруг СУБД - и лег в основу разработки MSRS*. Прямым следствием этого стал благополучный выпуск продукта, а насколько применение данного подхода сделает его успешным и востребованным - покажет ближайшее будущее.
Любой из серверных продуктов, выпускаемых самой Microsoft, нуждается в отчетной функциональности, которую ранее было принято брать из первых оказавшихся под рукой средств. Мы помним отчеты в формате HTML, выгрузку данных в Excel и Word. В подобных условиях не может быть и речи не только о единой службе - поставщике любых типов отчетов, но и о консолидации содержащихся в них данных.
Осознание этой проблемы привело к тому, что в январе 2004 г. состоялся выпуск платформы для управления отчетами MSRS. В середине 2004 г. платформа получила первый пакет обновлений. В настоящий момент MSRS интегрируется с такими продуктами, как Microsoft CRM 1.2, Exchange Server 2003 и Operations Manager 2005.
Главная задача MSRS - обеспечить комплексный подход к управлению отчетами и поддержку всего жизненного цикла отчетов (рис. 4), включающего создание отчетов, управление ими и доставку отчетов.
Рис. 4. Архитектура платформы Microsoft Reporting Services. |
- извлечение информации из источников;
- обработка данных и формирование отчета;
- доставка отчета;
- поддержка интегрированной безопасности.
Кроме размещения данных, в шаблоне отчета описывается связь с источниками данных, такими, как SQL Server 7.0 и 2000, SQL Server 2000 Analysis Services, Oracle, а также любыми источниками OLE DB и ODBC.
- определение источников данных;
- размещение данных из источников на различных листах отчета;
- предварительный просмотр будущего отчета.
Особенно удобна функция предварительного просмотра, позволяющая видеть будущий отчет и исправлять допущенные в процессе создания недочеты. Следует также отметить, что шаблон отчета может принимать информацию, на основании которой формируется содержимое отчета. Это свойство позволяет реализовать параметризованные отчеты.
- помещать шаблон отчета на сервер;
- управлять иерархией размещения отчетов;
- формировать выбранный пользователем отчет;
- разграничивать доступ к отдельным отчетам, каталогам отчетов, а также источникам данных (используется ролевая модель, базирующаяся на интегрированной безопасности Windows);
- определять методику доставки отчета потребителям ("подписку").
"Менеджер отчетов" умеет представлять данные своего интерфейса в HTML-формате, а также конвертировать в файлы PDF, XLS, XML, CSV и популярные графические форматы.
Как же быть с традиционными Windows-приложениями? В настоящий момент Microsoft предлагает решение, основанное на внедрении в Windows-приложения управляющего элемента ActiveX для просмотра Web; доступ к данным организован посредством получения HTML от того же "Менеджера отчетов". Пример реализации такого приложения включен в поставку MSRS.
Безусловный недостаток MSRS - Web-ориентированность "Менеджера отчетов", а также отсутствие полноценного управляющего элемента для отображения отчетов в Windows-приложениях. Решение этой проблемы заложено в архитектуру MSRS в виде доступа к серверу отчетов при помощи технологии Web-сервисов. Как обещает Microsoft, такое средство должно появиться в выходящем в этом году Microsoft SQL Server 2005.
Среди небольших проблем следует также отметить отсутствие экспорта отчета в формат RTF и DOC, отсутствие возможности печати HTML-представления отчета, а также невозможность локализации интерфейса "Менеджера отчетов". Хочется надеяться, что данные проблемы будут решены в будущих версиях и пакетах обновления.
Пример использования
Для иллюстрации использования MSRS воспользуемся тем же примером, на котором демонстрировали возможности CRVS.
Рис. 5. Указание источника данных для отчета. |
Рис. 6. Выбор процедуры извлечения информации в "Дизайнере отчетов". |
На левой панели можно увидеть поля структуры данных, которую возвращает процедура EmployeesAnalystQueryProc. Эти поля служат основой для связывания данных с их размещением на странице отчета. Следует отметить - и это демонстрирует раскрывающийся список - что источником данных может быть не только процедура.
После этого мы получаем возможность конструировать структуру отчета на базе информации, предоставляемой процедурой EmployeesAnalystQueryProc. Для этого служит вкладка Layout "Дизайнера отчетов" (рис. 7). При конструировании шаблона отчета мы пользуемся панелью инструментов, содержащей элементы управления для отображения данных в отчете. Как видно из рис. 7, среди них есть такие "кубики", как Image (Изображение), List (Список) и т. п. В процессе конструирования обязательно нужно связать элементы отчета с полями структуры данных, которую возвращает процедура EmployeesAnalystQueryProc.
Рис. 7. Размещение данных на странице отчета. |
Рис. 8. Предварительный просмотр отчета. |
Рис. 9. Развертывание отчета. |
После этой операции шаблон отчета помещается на сервер отчетов, и теперь можно увидеть готовый отчет, содержащий данные, выбрав его в "Менеджере отчетов" (рис. 10). Обратите внимание на панель навигации, которая выводится в верхней части страницы отчета. Эта панель позволяет организовать постраничный просмотр отчета и (с помощью команды Select a format в раскрывающемся списке) преобразовать отчет в любой из представленных форматов данных.
Рис. 10. Вид готового отчета. |
Резюмируя, следует сказать, что и MSRS, и CRVS не только содержат средства для табличного представления данных, но и поддерживают реализацию интерактивных отчетов.
Рекомендации по выбору
Прежде всего отметим, что предлагаемые рекомендации основаны на функциональных особенностях каждого из продуктов, а также на опыте их использования.
MSRS подходит для проектов, в которых либо уже используется Microsoft SQL Server, либо существует возможность его задействовать. MSRS предоставляет разработчику максимум возможностей для поддержки всего цикла управления отчетами. Можно уверенно утверждать, что MSRS в качестве основы таких проектов обеспечит надежную базу для разработки отчетной функциональности приложения. Кроме этого, в будущем пользователи смогут получить удобную возможность разработки собственных отчетов, а также поддержку создания на основе MSRS отчетов для других приложений.
Если большая часть объема функциональности вашего приложения - это работа с разными по своей структуре отчетами, и при этом данные для них годятся MSRS в качестве источника, то можно уверенно констатировать, что вам и будущим пользователям приложения сильно повезло. Кроме полноценной отчетной системы, в качестве бесплатного бонуса они получают достаточно универсальное средство для конвертирования отчетов в широкий спектр форматов.
С другой стороны, если вы не можете позволить себе Microsoft SQL Server и, как следствие, MSRS, следует обратить внимание на возможности CRVS. Быть может, вашему приложению, не слишком сложному с точки зрения управления жизненным циклом отчетов, будет достаточно встроенной поддержки отчетной функциональности.
Обзорный характер статьи, к сожалению, не предполагает подробного рассмотрения всех возможностей компонентов. Например, мы не упомянули о том, что Crystal Reports позволяет организовать взаимодействие с помощью актуальной технологии Web-служб, а MSRS имеет расширяемую программную модель. Тем не менее будем надеяться, что представленной информации вполне достаточно, чтобы сделать правильный выбор.
Другие статьи из раздела
Chloride
Демонстрация Chloride Trinergy
Впервые в России компания Chloride Rus провела демонстрацию системы бесперебойного электропитания Chloride Trinergy®, а также ИБП Chloride 80-NET™, NXC и NX для своих партнеров и заказчиков.
NEC Нева Коммуникационные Системы
Завершена реорганизация двух дочерних предприятий NEC Corporation в России
С 1 декабря 2010 года Генеральным директором ЗАО «NEC Нева Коммуникационные Системы» назначен Раймонд Армес, занимавший ранее пост Президента Shyam …
компания «Гротек»
С 17 по 19 ноября 2010 в Москве, в КВЦ «Сокольники», состоялась VII Международная выставка InfoSecurity Russia. StorageExpo. Documation’2010.
Новейшие решения защиты информации, хранения данных и документооборота и защиты персональных данных представили 104 организации. 4 019 руководителей …
Adaptec by PMC
RAID-контроллеры Adaptec Series 5Z с безбатарейной защитой кэша
Опытные сетевые администраторы знают, что задействование в работе кэш-памяти RAID-контроллера дает серьезные преимущества в производительности …
Chloride
Трехфазный ИБП Chloride от 200 до 1200 кВт: Trinergy
Trinergy — новое решение на рынке ИБП, впервые с динамическим режимом работы, масштабируемостью до 9.6 МВт и КПД до 99%. Уникальное сочетание …
30 ноября 2021 г. | Он-лайн формат
Dell Technologies Forum 2021
По существу, ReportViewer является наиболее мощным добавлением к таким элементам управления как, GridView, DataList, DetailsView, FormView, Repeater. В ReportViewer отчёты можно создавать с помощью технологии "drag-and-drop" внутри Дизайнера Отчётов (Report Designer), входящего в среду разработки Visual Studio 2005.
Параграф 2. Источник данных
В качестве источника данных будем использовать таблицы базы данных. База данных может быть любой, но для простоты изложения выберем наиболее простую - Microsoft Access. Например, создадим простую базу с именем Animals. Последовательность создания базы, для тех, кто по какой либо причине это еще не делал, показана на рисунках 1-5. Действия выполняются после запуска Microsoft Access:
Рис.1. Создание БД
Создание таблицы БД:
Рис.2. Создание таблицы БД
Задание полей таблицы:
Рис.3. Задание полей таблицы
После задания полей таблицы и попытки закрыть окно Table, среда запросит имя файла базы данных. Запишем любое имя, например ThisAnimals.
Рис.4. Открытие созданной таблицы базы данных
Кликнем правой кнопкой мышки по имени таблицы базы данных - ThisAnimals - и в открывшейся таблице введем информацию, например такую:
Рис.5. Заполнение таблицы информацией
Параграф 3. Создание проекта решения
Создадим простой Windows проект решения, как мы это делали неоднократно (Меню File/New/Project). Дадим имя проекту RepView, как показано на Рис.6:
Рис.6. Создание проекта решения
Поместим на форму два контрола Button и ReportViewer, как показано на Рис.7:
Рис.7. Добавление рабочих контролов
Проект создан, но прежде чем заполнять его кодом, отвлечемся на источник информации.
Параграф 4. Источник данных для отображения
Нажимаем в правом верхнем углу контрола треугольничек и выбираем пункт Design a new Report (Рис.7.). В появившемся окне редактора ReportViewer, нажимаем кнопку "Add New Source.."(Рис.8.)
Рис.8. Добавление источника данных
Прежде чем выбрать DateBase и нажать кнопку Next (Рис.9.), мы можем скопировать файл созданной выше базы данных (файл Animals.mdb) в директорию проекта решения (хотя это и не является обязательным, среда предложит Вам позже выполнить это еще раз, но и там у Вас останется право выбора).
Рис.9. Добавление источника данных
Нажимаем кнопку New и далее выбираем DataSource и DataFileName, как показано на Рис.10.
Рис.10. Добавление DataSource и DataFileName
В результате выбора получим результат:
Рис.11. Результат выбора источника данных
После нажатия кнопки Next не соглашаемся включить файл базы данных в текущий проект (зависит от цели задачи).
Результат мы видим на Рис.12:
Рис.12. Результат выбора источника данных
Нажимаем кнопку Finish. Результат выбора источника данных будет иметь вид Рис.13:
Рис.13. Результат выбора источника данных
Параграф 5. Отображение данных
Кликнем мышкой в поле дизайнера Report1.rdlc и в меню View выберем ToolBox. В результате в проекте отобразится ToolBox, с контролами, которые доступны для использования в ReportViewer (Рис.14.). Здесь мы видим все доступные для отображения в ReportViever контролы. Вначале будем использовать таблицу. Перетащим таблицу на панель дизайнера:
Рис.14. Добавление таблицы в дизайнер ReportViever
Вновь вернемся на вкладку DtatSource и перетащим поля источника во вторую строку таблицы, как показано на Рис.15.
Рис.15. Добавление полей отображения в ReportViever
Мы можем перетащить поля и в третью строку. При этом, по умолчанию, ячейка таблицы будет восприниматься как сумма содержимого ячеек данного столбца:
Достаточно кликнуть правой кнопкой мышки по данной ячейке и выбрать пункт "fx Expression. " мы отобразим окно "Edit Expression", где можно подобрать любую другую функцию из множества доступных. Для нашего примера в первой ячейке третьей строки запишем просто слово "Итого".
Иначе, мы определили структуру отображения, но пока не дали сами данные для отображения. Однако, учитывая, что Visual Studiо сохраняет все при выполнении решения, мы, тем самым сохранили и файл Report1.rdlc, который на данный момент содержит структуру отображения данных и структуру ее источников в виде нашего AnimalsDataSet.
Следует особо обратить внимание на то, как заданы ReportEmbeddedResource (RepView.Report1.rdlc) и DataSources - ("AnimalsDataSet _ ThisAnimals", MyDataSet.Tables[0]). Нарушение пунктуации приведет к ошибке. Выполним решение и увидим результат (Рис.16.):
Рис.16. Использование ReportViever для отображения табличных данных
Теперь добавим контрол Chart со вкладки Tools ReportViewer. И, как показано на Рис.17. перетащим поля в своеобразные ушки контрола, которые появляются при двойном клике мышкой в поле контрола.
Рис.17. Использование ReportViever для отображения табличных данных
Кликнем правой кнопкой мышки на контроле Chart и выберем пункт Properties - увидим панель, позволяющую выбрать практически все стандартные диаграммы Microsoft (Word, Excel) и задать множество свойств. Выберем понравившуюся нам диаграмму (Рис.18.).
Рис.18. Выбор диаграммы
После нажатия кнопки OK, выполним решение. Результат показан на Рис.19:
Рис.19. Выбор диаграммы
Параграф 6. Упрощенный способ отображения данных
Владимир Розанов (инженер-программист, Полесский государственный университет) прислал письмо:
Спасибо Владимиру, именно благодаря ему, мне пришлось продолжить статью. Я вполне согласен с Владимиром, достаточно установить свойства, как показано на Рис.20., и написать код, приведенный ниже, и при загрузке решения на выполнение мы получим тот же результат, что и на Рис.19. Этого во многих случаях, вполне достаточно для выполнения цели создания приложения.
Рис.20. Упрощенный способ отображения данных
Однако, мы, при этом, теряем гибкость отображения. Для каждого использования ReportViewer потребуется создать свой файл ReportEmbeddedResource (RepView.Report1.rdlc, RepView.Report2.rdlc. ). Приведенный же метод позволяет использовать многократно один и тот же файл ReportEmbeddedResource. Простейший пример приводится ниже.
Параграф 7. Использование одного ReportEmbeddedResource для вывода различных отчетов
Создадим еще одну таблицу в нашей базе данных (связанную по id с ранее созданной), как показано на Рис.21.
Рис.21. Создание дополнительной таблицы
Добавим еще одну кнопку и контрол Label на форму, и будем использовать следующий код (приводится полностью):
Цветом выделено предложение Select. Второе из них приводит названия выбираемых полей из двух таблиц к их названиям в созданном нами "AnimalsDataSet.ThisAnimals". Это приведение и позволяет использовать файл "ReportEmbeddedResource" уже созданный нами для отображения новых данных.
Результат выполнения приложения при поочередном нажатии кнопок 1 и 2 показан на Рис.22:
Рис.22. Использование одного ReportEmbeddedResource для вывода различных отчетов
Распаковав скачанный файл вы найдете одну директорию, с решением, содержащим код последнего примера и файл Animals.mdb. Директорию с решением можно поместить в любое место любого жесткого диска, для последующего его открытия в Visual Studio 2005 и выше. Файл базы данных Animals.mdb должен быть помещен в директорию C:\Bases\, которую Вам придется создать. После этого Вы можете продолжить эксперименты с кодом.
Молчанов Владислав 25.11.2008г.
Еcли Вы пришли с поискового сервера - посетите мою главную страничку
На главной странице Ва узнаете, как я могу помочь Вам в написании офисной программы любой сложности в соответствии с Вашими запросами . И найдете ряд програм или ссылок на образцы.
Простой отчет
Рис. 1. Создание простого отчета
После того, как откроется диалоговое окно Crystal Report Gallery, вы можете принять настройки по умолчанию (радиокнопка Using the Report Expert и строка Standard) и щелкнуть по кнопке OK. Когда откроется диалоговое окно Report Expert, перейдите к ветке OLE DB (ADO) древовидного списка на вкладке Data. В появившемся диалоговом окне OLE DB (ADO) выберите Microsoft OLE DB Provider for SQL Server, укажите сервер SQL Server и информацию для входа в этот сервер, затем выберите базу данных Northwind и щелкните по кнопке Finish. Вернитесь к диалоговому окну Standard Report Expert, открыв узел Northwind иерархического дерева, перейдите к узлу Tables, затем дважды щелкните по узлу Customers. На вкладке Fields щелкните по кнопке Add All, чтобы добавить в отчет все поля таблицы Customers. Далее, убедитесь в том, что на вкладке Style для создаваемого отчета указан соответствующий заголовок в поле Title и выбран стиль в списке Style, затем щелкните по кнопке Finish.
Я воспользуюсь этим отчетом для иллюстрации примеров, содержащихся в этой статье. В качестве первого примера рассмотрим отображение отчета в окне. Выполнить это довольно легко. Просто перенесите CrystalReportViewer из палитры Windows Forms окна Toolbox в среду разработчика для формы по умолчанию в проекте и установите для атрибута Name значение cvwMain, для атрибута Dock значение Fill, для атрибута ReportSource - мой отчет (используя опцию Browse) и затем запустите приложение. После того, как я спроектирую отчет, войдя в базу данных с пустым паролем, этот отчет сразу появится на экране. При наличии непустого пароля для отображения отчета потребуется снова войти в базу данных. Далее я покажу, как написать небольшую программу, автоматизирующую вход в базу данных, с помощью которой пользователи, уже прошедшие процедуру аутентификации, не будут повторно входить в базу данных для запуска отчетов.
Строго типизированные отчеты
cvwMain.ReportSource = New CustomersBasic()
Если вы сейчас снова запустите приложение, то ваш отчет запустится, как и прежде. Этот запуск отличается от предыдущего тем, что, не ссылаясь на конкретный файл, находящийся в конкретном физическом месте, ReportViewer обращается непосредственно к объекту, который может выступать в качестве экземпляра, полученного из соответствующего класса в сборке приложения, внешней сборке или, как вы увидите далее, в XML Web Service.
Dim tbCurrent As CrystalDecisions.CrystalReports.Engine.Table
Dim tliCurrent As CrystalDecisions.Shared.TableLogOnInfo
For Each tbCurrent In cbsMain.Database.Tables
tliCurrent = tbCurrent.LogOnInfo
With tliCurrent.ConnectionInfo
.ServerName = "localhost"
.UserID = "ReportUser"
.Password = "msdn"
.DatabaseName = "Northwind"
End With
tbCurrent.ApplyLogOnInfo(tliCurrent)
Next tbCurrent
Рис. 2. Запись Crystal Reports в базу данных
Server Explorer
Теперь рассмотрим другие способы конфигурации элементов управления объекта CrystalReportViewer. Одним из таких способов на этапе разработки является использование проводника Server Explorer. В связи с последними изменениями в .NET Framework данная функция генератора отчетов Crystal Reports for Visual Studio .NET некорректно устанавливается инсталлятором Visual Studio. Чтобы ее настроить и продолжить выполнение следующих шагов, описанных в статье, убедитесь, что все права доступа для папки Crystal Reports в каталоге Visual Studio .NET установлены и осуществляется полное управление пользовательской средой ASPNET. (Кстати, по умолчанию эта папка находится в C:\Program Files\Microsoft Visual Studio .NET\Crystal Reports). Проверить права доступа можно с помощью вкладки Security в окне свойств папки. Чтобы открыть вкладку Security, пользователи Windows XP должны выбрать пункт меню Tools / Folder Options в окне Explorer, щелкнуть по вкладке View и снять флажок "Use simple file sharing", который является последним пунктом в списке Advanced settings. После выполнения этих шагов все последующие шаги должны выполняться корректно.
Щелкните по узлу Servers иерархического дерева, затем по узлу с именем вашего локального компьютера, далее по расположенному под ним Crystal Services и, наконец, по Server Files. Под этим узлом появятся две папки, в каждой из которых будут содержаться несколько файлов отчетов (см. рис.3). Любой из этих .rpt-файлов можно перетащить в среду разработчика формы, который завершит создание объекта разработчика компонентов ServerFileReport, указывающего на правильный .rpt-файл. Теперь нашим следующим шагом будет установление связи между этим объектом и вашим отчетом.
Рис. 3. Server Explorer
Таким образом, все папки и файлы отчетов, отображаемые в этом разделе Server Explorer, будут расположены в отдельном каталоге на жестком диске сервера. По умолчанию эта папка содержится в подкаталоге Samples\Reports основной папки Crystal Reports, о которой я уже говорил. Две упомянутые прежде папки являются подкаталогами основной папки Crystal Reports и в них физически содержатся все персональные .rpt-файлы.
Чтобы ваш отчет появился в Server Explorer, скопируйте его в родительскую папку, либо в одну из его дочерних папок, либо в вашу собственную. Например, в папке Samples\Reports вы можете создать папку MSDN и скопировать в нее CustomersBasic.rpt. Затем, если вы щелкните правой кнопкой мыши по узлу Server Files в Server Explorer и выберите Refresh в контекстном меню, то появится папка MSDN с дочерним узлом для CustomersBasic.rpt. Перетащите его на вашу форму и переименуйте конечный объект sfrCustomersBasic. В окне Properties задайте атрибут ReportSource формы cvwMain, указав на этот объект. Закомментируйте каждую строку программы в событии формы Load и запустите приложение, после чего на экране появится ваш отчет.
Создание отчетов из DataSets
Рис.4. Добавление DataSet
Теперь, когда я модифицировал отчет для работы с экземпляром dsNorthwind, нужно создать его в моей форме и задать в атрибуте ReportSource объекта CrystalReportViewer. Для этого перетащите таблицу Customers из Server Explorer на плоскость разработки формы, тем самым добавив в нее объекты SQLConnection и SQLDataAdapter, указывающих на базу данных Northwind и на таблицу Customers этой базы данных соответственно. Переименуйте эти объекты в scnNorthwind и sdaCustomers и измените атрибут ConnectionString объекта scnNorthwind, включив в него идентификатор пользователя и пароль. Затем щелкните правой кнопкой мыши по sdaCustomers и выберите Generate Dataset. В разделе "Choose a dataset" выберите радиокнопку Existing, а в правом от нее раскрывающемся списке имя класса вашего строго типизированного набора DataSet (такой выбор наиболее соответствует настройкам по умолчанию). На рисунке 5 это показано достаточно ясно.
Рис. 5. Создание DataSet
Щелкните по кнопке OK, переименуйте новый объект DataSet в "ndsMain" и замените код события Load на следующий фрагмент:
Обратите внимание, что в данном фрагменте фигурирует созданный мною объект "ndsMain", который является экземпляром класса dsNorthwind строго типизированного набора DataSet. Далее, этот фрагмент программы задает атрибуту DataSource объекта "cbsMain" (экземпляр класса строго типизированных отчетов CustomersBasic) значение "ndsMain". И, наконец, как и в предыдущих примерах, атрибуту ReportSource формы cvwMain (мой объект CrystalReportViewer) я задаю значение "cbsMain".
Запустите свое приложение и убедитесь, что отчет выполняется и отображается на экране так же, как и в других случаях. Этот пример отличается тем, что в нем данные поступают не из базы данных, а от изолированного объекта DataSet. В моем случае заполнение объекта DataSet осуществлялось с помощью прямого запроса к таблице Customers. (Чтобы увидеть фактический текст запроса, в объекте sdaCustomer выберите SelectCommand и затем CommandText.) Я мог бы построить этот объект DataSet из любого источника данных или из нескольких выбранных мною источников, поскольку построенный набор данных зависим от структуры ndsNorthwind.
Создание отчетов из хранимых процедур
Чтобы проиллюстрировать эту тему, сначала создадим параметризованную хранимую процедуру для работы с таблицей базы данных Customers, имеющей имя spCustomers. Эта хранимая процедура забирает параметр строки, который должен использоваться в операторе WHERE для ограничения количества возвращаемых записей. После этого в тексте программы я построю объект набора данных DataSet для этой процедуры и свяжу отчет с этим набором данных. Вот текст хранимой процедуры.
CREATE PROCEDURE dbo.spCustomers
(
@CustPattern nVarChar(40)
)
AS
select * from Customers Where CompanyName Like @CustPattern + '%'
RETURN
Чтобы создать отчет из хранимой процедуры (присвоив параметру @CustPattern произвольное значение "A"), я изменил текст события формы Load (см. пример на рисунке 7).
Private Sub frmViewReport_Load(ByVal sender As Object, ByVal e As _
System.EventArgs) Handles MyBase.Load
Dim scmCustomersSP As New SqlClient.SqlCommand("spCustomers", _
scnNorthwind)
scmCustomersSP.CommandType = CommandType.StoredProcedure
scmCustomersSP.Parameters.Add("@CustPattern", "A")
Dim sdaCustomersSP As New SqlClient.SqlDataAdapter(scmCustomersSP)
Dim dsReport As New DataSet()
sdaCustomersSP.Fill(dsReport, "Customers")
Рис. 7. Модифицированный OnLoad Event
Затем щелкните правой кнопкой мыши по плоскости разработки отчета и выберите в контекстном меню пункт Database / Set Location. Спуститесь по иерархическому дереву Replace With к узлу OLE DB (ADO), еще раз щелкните правой кнопкой мыши, чтобы открылось диалоговое окно OLE DB (ADO), и введите всю необходимую информацию для подключения к вашей копии базы данных SQL Server Northwind. Вернувшись к диалоговому окну Set Location, разверните узел Northwind, затем узел Stored Procedures и выберите узел spCustomers;1. В комбинированном списке Current Data Source укажите Customers, щелкните по кнопке Replace и затем по кнопке Close.
Рис. 8. Параметры
Не смотря на то, что генератор отчетов Crystal Reports for Visual Studio .NET может запросить значения параметров и запустить отчет без написания программного кода, в большинстве случаев желательно, чтобы эти значения запрашивались у приложений и передавались в отчет программным путем. На рисунке 9 приведена программа, необходимая для программного присваивания значений параметров с помощью объектной модели Crystal Reports. В этой программе я снова использовал произвольное значение "A", присвоив его параметру pdvCustPattern.
В этой статье я приведу пример создания и использования отчёта Crystal Reports в Visual Studio.
Приведённый пример — это реально рабочий проект по подготовке к печати билетов на обычном лазерном принтере.
Начнём с того что нам потребуется источник данных поэтому вначале создадим проект в котором будем использовать наш отчёт и создадим источник данных который выгрузим в XML файл, для более простого и наглядного создания нового отчёта и его настройки.
2. Теперь по нажатию кнопки описываем процедуру создания XML файла с данными для отчёта.
(Код создаёт XML файл с номерами и щтриховыми кодами билетов, штриховые коды начинаются и заканчиваются символом "*" — поскольку будем использовать тип штрихкодов Code39.)
3. После того как наш XML файл сохранён приступаем к созданию непосредственно самого отчёта (отчётной формы).
Создаём новый проект в Visual Studio — Reporting -> Crystal Reports Application.
Появится проект отчёта, в который добавляем источник данных, в дереве слева:
Левой кнопкой по «Database Fields» затем Database Expert -> Database Files (выбираем созданный нашим проектом XML файл), затем выбираем поля, в нашем случае все.
Для размещения полей в отчёте просто перетаскиваем их на лист.
Вот что получилось у меня:
Чтобы сделать так, как на рисунке необходимо изменить параметры отчёта в Report->Section Expert. (там задаются основные параметры отчёта, от которых зависит какой именно вид он примет).
По завершении сохраняем наш отчёт и копируем из полученного проекта CrystalReport1.rpt в папку Debug предыдущего проекта.
4. Теперь возвращаемся к нашему проекту и пишем оставшуюся часть кода для вызова отчёта.
Прежде всего добавляем ещё одну форму (в нашем случае FormRW), и размещаем на ней элемент CrystalReportViewer — здесь мы будем отображать наш отчёт.
И дописываем процедуру нажатия кнопки:
Для работы всех используемых в проекте компонент потребуется подключить:
P.S.
Вот что получилось в результате (после некоторых доработок):
Читайте также: