У цій статті я приведу приклад створення і використання звіту Crystal Reports в Visual Studio.
Наведений приклад - це реально робочий проект по підготовці до друку квитків на звичайному лазерному принтері.
Почнемо з того що нам буде потрібно джерело даних тому спочатку створимо проект в якому будемо використовувати наш звіт і створимо джерело даних який вивантажимо в XML файл, для більш простого і наочного створення нового звіту і його налаштування.
1. Створюємо звичайний проект C # в Visual Studio, форму і додаємо 3 поля: префікс (на нашому квитку буде штрихкод і номер, в штрихове коді буде використаний префікс), початковий номер квитка (з якого номера почати друк), кінцевий номер (яким закінчити ). Також додаємо кнопку, ат натискання на яку буде відбуватися заповнення джерела даних і виклик форми.
Ось як це виглядає:
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.
Ось що вийшло в результаті (після деяких доопрацювань):
Я знаю про динамічну вставку картинок тільки через 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.