Написать данную статью меня побудило отрывочность
и неполнота информации в литературе, технической документации и
Internet-публикациях о том как пошагово с нуля сделать работоспособный отчет с
использованием Crystal Reports.
Написать данную статью меня побудило отрывочность и неполнота информации в
литературе, технической документации и Internet-публикациях о том как пошагово с
нуля сделать работоспособный отчет с использованием Crystal Reports.
Программное обеспечение: ОС: Windows 2003 Server Средства разработки:
Visual Studio.Net 2003 Enterprise Architecht База данных: MS SQL Server 2000
Источник данных: Northwind
Создаем проект: File/New/Project нажимаем Windows Application
На Form1 переносим две кнопки:
- на первой в Name пишем btnLoadReport, в Text - LoadReport - во второй в
Name пишем btnExportCrystalReportViewer, в Text - ExportCrystalReportViewer
Потом на форму переносим TextBox (в Name прописываем tbCustomerID) и Label
(в Text прописываем SearchCustomerID)
Переносим на форму CrystalReportViewer
Добавляем в проект компонент CrystalReport
- кликаем правой кнопкой мыши на названии проекта в SolutionExplorer (как
показано на рисунке внизу)
- нажимаем Add New Item, в открывшемся окне находим CrystalReport и нажимаем
Open
Теперь в окне выбираем "As a Blank Report" и нажимаем OK
В открывшемся окне в Field Explorer нажимаем на Add/Remove Database, как
показано ниже
Кликаем на OLE DB(ADO)
Выбираем Microsoft OLE DB Provider for SQL Server , потом на Next
В поле Server пишите имя своего ПК, все остальное выбираете как показано на
картинке, потом нажимаете Next, а в следующем окне - Finish
Для успешности соединения с SQL Server проверьте его настройки безопасности
по Authontefication (должны соответствовать рисунку ниже)
В Database Expert выбираете таблицу Customers, потом OK
В поле Details помещаем Text Object,
Растягиваем этот Text Object, нажимаем Edit Text Object,
потом помещаем туда шаблон какого-либо документа, например этот:
**********************************************************************************
ДОГОВОР №______
на предоставление информационных услуг по трудоустройству кандидату []
г.[ ] "____" ______________ 200_ г.
ООО "Остап Бендер&Копыта Паниковского", именуемое в дальнейшем АГЕНТ, в лице индивидуального
предпринимателя Бендера Остапа Ибрагимовича, действующей на основании свидетельства
№ 4354545- ИП002519 от 17.08.2001 г. и [ ], именуемое в дальнейшем КАНДИДАТ,
заключили настоящий договор, о нижеследующем:
I. ПРЕДМЕТ ДОГОВОРА:
1.1. АГЕНТ, за вознаграждение, оказывает информационные услуги по трудоустройству
КАНДИДАТУ, в соответствии с его специальностью, образования и др. требований.
1.2. Условия работы кандидатов определяется в заявке, заполненной и подписанной
между работодателем и АГЕНТОМ.
1.3. КАНДИДАТ обязуется оплатить услуги по трудоустройству АГЕНТУ в сумме, оговоренной
в данном договоре, в сроки установленные настоящем договором.
II. ОБЯЗАТЕЛЬСТВА И ОТВЕТСТВЕННОСТЬ СТОРОН:
2.1. АГЕНТ обязуется оказывать информационные услуги по трудоустройству КАНДИДАТА
в соответствии с его ожиданиями, возможностями и навыками, оговоренными в
анкете кандидата.
2.2. КАНДИДАТ обязуется предоставить полную и достоверную информацию о своем трудовом
опыте, о личных и деловых качествах, согласно утвержденному перечню документов в
установленном порядке.
КАНДИДАТ:__________________________ АГЕНТ:______________________________
______________________________________ ___________________________________________
______________________________________ ___________________________________________
______________________________________ ___________________________________________
______________________________________ ___________________________________________
В отмеченные скобками "[]"места документа будут вноситься поля отчета.
Переносим мышкой из Field Explorer(из Database Field /Customers) в текстовое
поле CustomerID, CompanyName, City.
Переходим на дизайнер формы (Form1.cs (или Form1.vb)
Переносим на Form1 SqlDataAdapter, в Query Builder строим запрос
Нажимаем Next
Выбираем Customers и нажимаем Add, потом Close
В Query Builder приводим к такому виду, далее - ОК
Далее Next, а на след странице - Finish
Нажимаем двойным кликом кнопку LoadReport
С#-код
После using System.Data; вставляем
using CrystalDecisions.Shared;
using CrystalDecisions.CrystalReports.Engine;
а в обработчике нажатия кнопки btnLoadReport
CrystalReport1 myReport = new CrystalReport1();
DataSet myDataSet = new DataSet() ;
sqlDataAdapter1.SelectCommand.Parameters["@CustomerID"].Value = tbCustomerID.Text;
sqlDataAdapter1.Fill(myDataSet, "Customers");
myReport.SetDataSource(myDataSet);
crystalReportViewer1.ReportSource = myReport;
VB.NET-код
Над public class Form1 вставляем Imports
CrystalDecisions.CrystalReports.Engine, а в обработчике нажатия кнопки
btnLoadReport заносим
Dim myReport As New CrystalReport1
Dim myDataSet As New DataSet
SqlDataAdapter1.SelectCommand.Parameters("@CustomerID").Value = tbCustomerID.Text
SqlDataAdapter1.Fill(myDataSet, "Customers")
myReport.SetDataSource(myDataSet)
CrystalReportViewer1.ReportSource = myReport
Для создания события экспорта, дважды кликаем по
btnExportCrystalReportViewer, и вносим
С#-код
CrystalReport1 myReport = new CrystalReport1();
DataSet myDataSet = new DataSet() ;
sqlDataAdapter1.SelectCommand.Parameters["@CustomerID"].Value = tbCustomerID.Text;
sqlDataAdapter1.Fill(myDataSet, "Customers");
myReport.SetDataSource(myDataSet);
crystalReportViewer1.ReportSource = myReport;
ExportOptions exportOpts = new ExportOptions();
DiskFileDestinationOptions diskOpts = new DiskFileDestinationOptions();
exportOpts = myReport.ExportOptions;
exportOpts.ExportFormatType = ExportFormatType.WordForWindows;
exportOpts.ExportDestinationType = ExportDestinationType.DiskFile;
diskOpts.DiskFileName = "C:/report.doc";
exportOpts.DestinationOptions = diskOpts;
myReport.Export();
MessageBox.Show("Отчет был экспортирован");
VB.NET-код
Dim myReport As New CrystalReport1
Dim myDataSet As New DataSet
SqlDataAdapter1.SelectCommand.Parameters("@CustomerID").Value = tbCustomerID.Text
SqlDataAdapter1.Fill(myDataSet, "Customers")
myReport.SetDataSource(myDataSet)
CrystalReportViewer1.ReportSource = myReport
Dim myExportOptions As New CrystalDecisions.Shared.ExportOptions
Dim myDiskFileDestinationOptions As New CrystalDecisions.Shared.DiskFileDestinationOptions
Dim myFormatTypeOptions As New CrystalDecisions.Shared.PdfRtfWordFormatOptions
myDiskFileDestinationOptions.DiskFileName = "C:\report.doc"
myExportOptions = myReport.ExportOptions
With myExportOptions
.ExportDestinationType = CrystalDecisions.[Shared].ExportDestinationType.DiskFile
.ExportFormatType = CrystalDecisions.[Shared].ExportFormatType.WordForWindows
.DestinationOptions = myDiskFileDestinationOptions
.FormatOptions = myFormatTypeOptions
End With
myReport.Export()
MsgBox("Отчет был экспортирован")
Тестируем форму. Вводим в поле tbCustomerID значение из столбца CustomerID
таблицы Customers. Например folig (или arout). Нажимаем LoadReport, а потом
ExportCrystalReportViewer. И … отчет готов (по умолчанию он экспортируется на
диск C:, в файл report.doc)