Итак, стоит задача, можно ли создавать отчеты типа Crystal Reports с использованием только бесплатных продуктов. Как известно Crystal Report не входит в поставку Microsoft Visual C# 2005 Express Edition. Какие есть бесплатные средства для создания отчетов ?!
Итак, знакомимся ReportViewer от Microsoft. Сначала устанавливаем Microsoft Visual C# 2005 Express Edition, а потом Visual Web Developer 2005 Express Edition.
Затем скачиваем Reporting Add-In for Visual Web Developer для визуального редактирования источников данных с сайта Microsoft http://download.microsoft.com/download/4/4/D/44DBDE61-B385-4FC2-A67D-48053B8F9FAD/SQLServer2005_ReportAddin.msi.
Затем можно вытянуться на вебстраницу компоненту ReportViewer, которая назодится в разделе Data. Нажам на треугольник в верхнем правом углу можно выбрать опцию «Design a new report». Откроется редактор отчетов.
В тулбоксе у него две вкладки, на самом деле данный редактор много функциональный, более того, ему посвящен целый сайт http://www.gotreportviewer.com/ . Ничего сложного нет, можно задать компоненту, источник данных. Далее создайем источник данных. Это стандартная процедура. В данном примере, я использовал простейший запрос “select * from products” и отображал его в виде таблицы.
Итак, после того как был сгенерирован файл отчета, необходимо сохранить его под другим вторым именем и желательно в каталоге, где находится проект разрабатываемый в Visual C# Express 2005. Далее, необходимо добавить в ToolBox Microsoft Visual C# 2005 Express Edition с помощью пункта контекстного меню «Choose Items …» компоненту ReportViewer (в данном случае как раз нужно будет выбрать из пространства имен Microsoft.Reporting.WinForns и пперетащить ее потом на форму. Как говорят, французы , вуаля ...
Но, тут есть одна сложность – Microsoft Visual C# 2005 Express Edition не содержит визарда для установления соединения с базой данных, поэтому придется немного попрограммировать, но предварительно узнав имена источников из базы данных:
SqlConnection sq = new SqlConnection(
"Initial Catalog=Northwind; Data Source=.\\SQLEXPRESS; Integrated Security=true"
);
DataSet ds = new DataSet();
SqlDataAdapter adapter = new SqlDataAdapter(
"select * from products", sq);
adapter.Fill(ds);
ReportDataSource source = new ReportDataSource();
// Имя источника должно совпадать с тем, который сгенерировал Visual Web Developer
source.Name = "DataSet1_Products";
source.Value = ds.Tables[0];
this.reportViewer1.LocalReport.DataSources.Add(source);
// пространство имен проекта TestWindows
// файл отчета Report1.rdlc
this.reportViewer1.LocalReport.ReportEmbeddedResource = "TestWindows.Report1.rdlc";
this.reportViewer1.RefreshReport();
Особо обращаю внимание на то, что имя источника данных для отчета должны совпадать с тем, которое было создано в Visual Web Developer 2005 Express Edition иначе будет сгенерирована ошибка внутри вида «A data source instance has not been supplied for the data source DataSet1_Products»
Резюмируя, можно сказать, что существует разумная альтернатива Crystal Reports, поскольку
Компонента бесплатная и поддерживает экспорт в PDF и Excel.
Формат файла представляет собой XML на который присутствует описание, то есть данный файл можно динамически генерировать средствами Visual Studio, чему есть приведены примеры.
Ну и источниками данных могут быть не только DataTable, но и List-ы объектов.
Еще раз укажу название сайта, на котором есть документация, скришоты приложений и примеры, доступные для скачивания http://www.gotreportviewer.com/.
К сожалению, я не нашел бесплатных компонент для Microsoft Visual C# 2005 Express Edition чтобы генерировать файлы отчетов Crystal Reports, хотя получить просмотрщик можно, установив Crystal Reports for .NET Framework 2.0 Redistributable Package, но компоненты дизайнера отчетов по-моему там нет.