Використовуємо crystal report в c #

У цій статті я приведу приклад створення і використання звіту Crystal Reports в Visual Studio.

Наведений приклад - це реально робочий проект по підготовці до друку квитків на звичайному лазерному принтері.

Почнемо з того що нам буде потрібно джерело даних тому спочатку створимо проект в якому будемо використовувати наш звіт і створимо джерело даних який вивантажимо в XML файл, для більш простого і наочного створення нового звіту і його налаштування.

1. Створюємо звичайний проект C # в Visual Studio, форму і додаємо 3 поля: префікс (на нашому квитку буде штрихкод і номер, в штрихове коді буде використаний префікс), початковий номер квитка (з якого номера почати друк), кінцевий номер (яким закінчити ). Також додаємо кнопку, ат натискання на яку буде відбуватися заповнення джерела даних і виклик форми.

Використовуємо crystal report в c #

Ось як це виглядає:
Використовуємо crystal report в c #

2. Тепер після натискання кнопки описуємо процедуру створення XML файлу з даними для звіту.

(Код створює XML файл з номерами і щтріховимі кодами квитків, штрих-коди починаються і закінчуються символом "*" - оскільки будемо використовувати тип штрихкодів Code39.)

3. Після того як наш XML файл збережений приступаємо до створення безпосередньо самого звіту (звітної форми).

Створюємо новий проект в Visual Studio - Reporting -> Crystal Reports Application.
З'явиться проект звіту, в який додаємо джерело даних, в дереві зліва:
Лівою кнопкою по «Database Fields» потім Database Expert -> Database Files (вибираємо створений нашим проектом XML файл), потім вибираємо поля, в нашому випадку все.
Для розміщення полів в звіті просто перетягуємо їх на лист.
Ось що вийшло у мене:

Використовуємо crystal report в c #

Щоб зробити так, як на малюнку необхідно змінити параметри звіту в Report-> Section Expert. (Там задаються основні параметри звіту, від яких залежить який саме вид він прийме).

По завершенні зберігаємо наш звіт і копіюємо з отриманого проекту CrystalReport1.rpt в папку Debug попереднього проекту.

4. Тепер повертаємося до нашого проекту і пишемо решту коду для виклику звіту.

Перш за все додаємо ще одну форму (в нашому випадку FormRW), і розміщуємо на ній елемент CrystalReportViewer - тут ми будемо відображати наш звіт.

Використовуємо crystal report в c #

І дописуємо процедуру натискання кнопки:


Для роботи всіх використовуваних в проекті компонент буде потрібно підключити:


P.S.
Ось що вийшло в результаті (після деяких доопрацювань):

Використовуємо crystal report в c #

Я знаю про динамічну вставку картинок тільки через OLE object.

Цей метод простий, але обмежений тим, що не можна для заздалегідь не заданої кількості записів, як в моєму випадку з квитками, задати кожному окрему картинку (наприклад фото). Однак можна динамічно довантажувати деякий набір зображень.

Блін ... У написав, сам заплутався. Вообщем це як на квитках в прикладі, можна скажімо міняти звіряток, але на всіх квитках вони будуть однакові, хоча і будуть відрізнятися від параметрів виведення звіту. А ось щоб на кожному квитку зробити, це напевно і можна - але швидше за все складно, не пробував.

Залишається тільки з бази витягнути файл і покласти на місце зазначеного.

P.S. Файл повинен бути .BMP.

Необхідно, наприклад:
Файл test.bmp (береться з mbd файлу - яким чином?), Вставляємо його в звіт, потім підміняємо цей файл будь-яким іншим, але шлях динамічно змінюється (в залежності від того. Де знаходиться запускной файл).

Поясню як я ці отчётікі роблю.
1. Створюю з основного проекту XML-ку з набором даних, для звіту (щоб було з чим експериментувати.
2. Створюю абсолютно новий проект в студії CrystalReport - не має нічого спільного з основним.
3. Додаю в нього в якості даних XML-ку і використовую поля для розміщення на формі звіту.
4. Зберігаю.
5. Забираю з цього проекту rpt - файл і використовую його в основному проекті, зазвичай вони у мене в окремій таткові c отчётікамі все лежать, підключаючи до нього безпосередньо джерело даних - і все працює.

Дякуємо. Запрацювало. Але з'явилася нова біда. Дані подвоюються. Наприклад, якщо рядків в XML дві (а саме стільки і маємо отримати), то в звіт потрапляє рівно в два рази більше, тобто чотири. При перевірці кількості рядків видається вірне кількість. Код такий:

Ось це ось незрозуміло навіщо взагалі робиться:


А якщо вже без цього ніяк, то перед завантаженням даних з XML, непогано б датасета вичистити:

Тобто кожен раз при запуску створенні звіту не потрібно це:
А як тоді відбувається прив'язка до бази, якщо в звіті ми вказуємо як джерело XML, а потім його не використовуємо?
І друге питання: на машинах, де немає студії програма не починається. Які компоненти повинні бути обов'язково встановлені крім .NET Framework 2.0?

Звіту передається джерело даних MyDS - дані в ньому вже є з бази. А за структурою він схожий xml - файлу, ми адже xml - файл з нього робили (робили тільки для того щоб форму звіту зробити в якій структура даних буде збігатися).

Бібліотеки пошуком можна знайти в каталозі з VisualStudio.

Схожі статті