Используем Crystal Report в C#
В этой статье я приведу пример создания и использования отчёта Crystal Reports в Visual Studio.
Приведённый пример — это реально рабочий проект по подготовке к печати билетов на обычном лазерном принтере.
Начнём с того что нам потребуется источник данных поэтому вначале создадим проект в котором будем использовать наш отчёт и создадим источник данных который выгрузим в XML файл, для более простого и наглядного создания нового отчёта и его настройки.
1. Создаём обычный проект C# в Visual Studio, форму и добавляем 3 поля: префикс (на нашем билете будет штрихкод и номер, в штриховом коде будет использован префикс), начальный номер билета (с какого номера начать печать), конечный номер (каким закончить). Также добавляем кнопку, ао нажатию на которую будет происходить заполнение источника данных и вызов формы.
Вот как это выглядит:
2. Теперь по нажатию кнопки описываем процедуру создания XML файла с данными для отчёта.
private void button1_Click(object sender, EventArgs e)
{
XmlDocument doc = new XmlDocument();
doc.AppendChild(doc.CreateXmlDeclaration("1.0","utf-8",null));
XmlNode rootNode = doc.AppendChild(doc.CreateElement("ticket"));
int j = int.Parse(textBox2.Text);
int j1 = int.Parse(textBox3.Text);
for (int i = j; i < j1+1; i++)
{
XmlNode bookNode = rootNode.AppendChild(doc.CreateElement("ticket"));
XmlNode titleNode = bookNode.AppendChild(doc.CreateElement("bar"));
long number = int.Parse(textBox1.Text);
number = number * 10000;
number = number+i;
titleNode.InnerText = "*" + number.ToString() + "*";
XmlNode titleNode1 = bookNode.AppendChild(doc.CreateElement("number"));
string num = number.ToString();
titleNode1.InnerText = num[2].ToString()+num[3].ToString()+num[4].ToString()+num[5].ToString();
}
doc.Save(@".\dataset.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 — здесь мы будем отображать наш отчёт.
И дописываем процедуру нажатия кнопки:
private void button1_Click(object sender, EventArgs e)
{
XmlDocument doc = new XmlDocument();
doc.AppendChild(doc.CreateXmlDeclaration("1.0","utf-8",null));
XmlNode rootNode = doc.AppendChild(doc.CreateElement("ticket"));
int j = int.Parse(textBox2.Text);
int j1 = int.Parse(textBox3.Text);
for (int i = j; i < j1+1; i++)
{
XmlNode bookNode = rootNode.AppendChild(doc.CreateElement("ticket"));
XmlNode titleNode = bookNode.AppendChild(doc.CreateElement("bar"));
long number = int.Parse(textBox1.Text);
number = number * 10000;
number = number+i;
titleNode.InnerText = "*" + number.ToString() + "*";
XmlNode titleNode1 = bookNode.AppendChild(doc.CreateElement("number"));
string num = number.ToString();
titleNode1.InnerText = num[2].ToString()+num[3].ToString()+num[4].ToString()+num[5].ToString();
}
doc.Save(@".\dataset.xml");
//Создаём отчёт
ReportDocument myReport = new ReportDocument();
//Задаём форму (которую создавали в пункте 3)
myReport.Load(@".\CrystalReport1.rpt");
DataSet myDS = new DataSet();
//Указываем источнику данных вновь сформированный XML файл.
myDS.ReadXml(@".\dataset.xml");
//Указываем отчёту откуда брать данные.
myReport.SetDataSource(myDS);
//Создаём форму.
FormRW frm = new FormRW();
//Указываем отчёт для CrystalReportViewer
frm.crystalReportViewer1.ReportSource = myReport;
//Открываем форму.
frm.Show();
}
Для работы всех используемых в проекте компонент потребуется подключить:
using System.Xml;
using System.Xml.Schema;
using CrystalDecisions.CrystalReports.Engine;
using System.IO;
P.S.
Вот что получилось в результате (после некоторых доработок):
Скачать исходник:
Скачать файл: makebarticket.rar [376.29 Kb] (cкачиваний: 14)