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

       

Строго типизированные отчеты


Теперь, когда я кратко изложил основные принципы создания простых отчетов, давайте перейдем к более сложным вопросам. Подобно тому, как создаются строго типизированные наборы DataSets со своими атрибутами и методами, можно создать строго типизированные отчеты. По своему существу все отчеты, созданные с помощью Crystal Reports и Visual Studio .NET, составляют класс строго типизированных отчетов в качестве побочного продукта самого процесса разработки. Чтобы в этом убедиться, щелкните по кнопке Show All Files (Показать все файлы) в Solution Explorer, перейдите по иерархическому дереву к CustomersBasic.rpt и убедитесь в существовании файла класса, созданного Visual Studio .NET. Я могу создать экземпляр этого класса в программе и назначить его атрибуту ReportSource объекта CrystalReportViewer, содержащегося в моей форме. Для этого я добавлю следующую строку текста программы к событию формы Load (установив атрибут ReportSource формы cvwMain в None в первом окне Properties).

cvwMain.ReportSource = New CustomersBasic()

Подобно строго типизированным наборам DataSets, которые используют разработчик компонентов DataSet, строго типизированные отчеты также имеют соответствующий разработчик компонентов. Если щелкнуть по палитре компонентов Components окна Toolbox в Visual Studio .NET, появится объект под названием ReportDocument. Перетащив его на свою форму, вы увидите имя класса вашего отчета в раскрывающемся списке Name диалогового окна Choose a ReportDocument. Выберите его и щелкните по кнопке OK. Вы получите исполняемый доступный экземпляр класса вашего отчета. Переименуйте этот объект в cbsMain (cbs является префиксом CustomersBasic) и замените следующей строкой текста программы в событии формы Load:

cvwMain.ReportSource = cbsMain

Если вы сейчас снова запустите приложение, то ваш отчет запустится, как и прежде. Этот запуск отличается от предыдущего тем, что, не ссылаясь на конкретный файл, находящийся в конкретном физическом месте, ReportViewer обращается непосредственно к объекту, который может выступать в качестве экземпляра, полученного из соответствующего класса в сборке приложения, внешней сборке или, как вы увидите далее, в XML Web Service.


Как я уже упоминал, если вы для создания отчета предоставили информацию о подключении с идентификатором пользователя и пустым паролем, то этот отчет после своего создания будет открыт немедленно. В любых других случаях генератор отчетов Crystal Reports for Visual Studio .NET предложит вам зарегистрироваться, поскольку вся информация о подключении, кроме пароля, сохраняется отчетом. Если вам потребуется предоставить пароль во время выполнения программы или другой набор информации о подключении, кроме той, которая уже была предоставлена во время создания отчета (что случается довольно часто), используйте программу, приведенную на рисунке 2 перед установкой cvwMain.ReportSource.





Dim tbCurrent As CrystalDecisions.CrystalReports.Engine.Table
Dim tliCurrent As CrystalDecisions.Shared.TableLogOnInfo

For Each tbCurrent In cbsMain.Database.Tables
tliCurrent = tbCurrent.LogOnInfo
With tliCurrent.ConnectionInfo
.ServerName = "localhost"
.UserID = "ReportUser"
.Password = "msdn"
.DatabaseName = "Northwind"
End With
tbCurrent.ApplyLogOnInfo(tliCurrent)
Next tbCurrent



Рис. 2. Запись Crystal Reports в базу данных

В программе на рисунке 2 я произвольно задал сервер, идентификатор пользователя и пароль, т.е. localhost, ReportUser и msdn соответственно. В большинстве приложений вам, вероятно, придется использовать глобальные переменные или атрибуты класса, или даже переменные сеанса в случае приложения ASP.NET, чтобы в любой момент можно было предъявить имя базы данных и учетные данные пользователя вашего приложения, введенные при первоначальной регистрации. Обратите внимание на цикл For Each в программе. Поскольку в моем отчете содержится только одна таблица, этот цикл по большому счету необязателен (я мог бы просто сделать ссылку на cbsMain.Database.Tables(0)), однако, эта программа будет работать с любым отчетом Crystal Reports for Visual Studio .NET, поэтому я предпочел его оставить, сделав программу более функциональной.


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