Добавление отчетов профессионального качества в приложение пользователя в Visual Studio (2)

       

Создание отчетов из DataSets


Позднее я расскажу о дополнительных возможностях разработчика компонентов ServerFileReport, а сейчас нам нужно рассмотреть следующий шаг, который заключается в модифицировании отчета с целью получения данных посредством поставщика DB OLE из ADO.NET DataSet, а не из физической базы данных. Сначала создадим строго типизированный набор DataSet на основе таблицы Customers базы данных Northwind. Для этого используем наиболее простой способ, добавим в проект пустой набор DataSet и присвоим ему имя DataSet dsNorthwind.xsd, открыв диалоговое окно Add New Item (см. рис.4).

Рис.4. Добавление DataSet

Откройте дизайнер компонентов DataSet, дважды щелкнув по соответствующему узлу в Solution Explorer. Перетащите таблицу Customers из Server Explorer на плоскость разработки DataSet и сохраните файл. Затем откройте отчет, щелкните правой кнопкой мыши по его плоскости разработки, чтобы открыть контекстное меню, и выберите Database и Set Location. В диалоговом окне Set Location разверните узлы Project Data, ADO.NET DataSets и узел для вашего набора DataSet, затем выберите таблицу Customers. Наконец, в раскрывающемся списке Current Data Source выберите Customers и щелкните по кнопке Replace. После этого отчет будет обращаться к вашему строго типизированному набору DataSet для получения метаданных и будет запускаться при привязке к экземпляру этого набора. Для продолжения щелкните по кнопке Close.

Теперь, когда я модифицировал отчет для работы с экземпляром dsNorthwind, нужно создать его в моей форме и задать в атрибуте ReportSource объекта CrystalReportViewer. Для этого перетащите таблицу Customers из Server Explorer на плоскость разработки формы, тем самым добавив в нее объекты SQLConnection и SQLDataAdapter, указывающих на базу данных Northwind и на таблицу Customers этой базы данных соответственно. Переименуйте эти объекты в scnNorthwind и sdaCustomers и измените атрибут ConnectionString объекта scnNorthwind, включив в него идентификатор пользователя и пароль. Затем щелкните правой кнопкой мыши по sdaCustomers и выберите Generate Dataset.
В разделе "Choose a dataset" выберите радиокнопку Existing, а в правом от нее раскрывающемся списке имя класса вашего строго типизированного набора DataSet (такой выбор наиболее соответствует настройкам по умолчанию). На рисунке 5 это показано достаточно ясно.



Рис. 5. Создание DataSet

Щелкните по кнопке OK, переименуйте новый объект DataSet в "ndsMain" и замените код события Load на следующий фрагмент:

sdaCustomers.Fill(ndsMain)
cbsMain.SetDataSource(ndsMain)
cvwMain.ReportSource = cbsMain

Обратите внимание, что в данном фрагменте фигурирует созданный мною объект "ndsMain", который является экземпляром класса dsNorthwind строго типизированного набора DataSet. Далее, этот фрагмент программы задает атрибуту DataSource объекта "cbsMain" (экземпляр класса строго типизированных отчетов CustomersBasic) значение "ndsMain". И, наконец, как и в предыдущих примерах, атрибуту ReportSource формы cvwMain (мой объект CrystalReportViewer) я задаю значение "cbsMain".

Запустите свое приложение и убедитесь, что отчет выполняется и отображается на экране так же, как и в других случаях. Этот пример отличается тем, что в нем данные поступают не из базы данных, а от изолированного объекта DataSet. В моем случае заполнение объекта DataSet осуществлялось с помощью прямого запроса к таблице Customers. (Чтобы увидеть фактический текст запроса, в объекте sdaCustomer выберите SelectCommand и затем CommandText.) Я мог бы построить этот объект DataSet из любого источника данных или из нескольких выбранных мною источников, поскольку построенный набор данных зависим от структуры ndsNorthwind.


Содержание раздела