Как использовать Crystal Reports без тесного соединения с БД? - PullRequest
4 голосов
/ 17 июля 2009

Я учусь использовать Crystal Reports (с VB 2005).

Большая часть того, что я видел до сих пор, состоит в том, чтобы отбирать данные непосредственно из базы данных, что хорошо, если это все, что вы хотите отобразить в отчете.

В моей БД много внешних ключей, поэтому я старался оставаться в здравом уме, представляя актуальную информацию в своем приложении, чтобы добавить в мои объекты дополнительные элементы, содержащие строки (описания) того, что представляют собой внешние ключи. Как:

Class AssetIdentifier

    Private ID_AssetIdentifier As Integer
    Private AssetID As Integer
    Private IdentifierTypeID As Integer
    Private IdentifierType As String
    Private IdentifierText As String

    ...

Здесь IdentifierTypeID является внешним ключом, и я ищу значение в другой таблице и помещаю его в IdentifierType. Таким образом, у меня есть текстовое описание прямо в объекте, и я могу носить его с другими вещами.

Итак, к моему вопросу о Crystal Reports.

Crystal Reports упрощает подключение к записям в конкретной таблице (особенно с экспертами), но это все, что вы получаете.

В идеале я хотел бы составить список своих классов, например

Dim assetIdentifiers as New List(Of AssetIdentifier)

и передайте его в Crystal Report вместо создания жесткой ссылки на конкретную БД, сделайте большую часть работы за меня, но предоставьте мне возможность обойти ту часть, которую он не выполняет. На данный момент наиболее близким является набор данных ADO.NET, но даже он кажется далеко удаленным. Я уже хорошо обрабатываю запросы: у меня есть все виды функций, которые возвращают List (Of Wh независимо) на основе запросов.

Есть ли простой способ сделать это?

Заранее спасибо!

ОБНОВЛЕНИЕ: ОК, я нашел кое-что здесь:

http://msdn.microsoft.com/en-us/library/ms227595(VS.80).aspx

но, похоже, он предоставляет эту возможность только для веб-проектов или веб-приложений. Мне не повезло, если я хочу интегрироваться в отдельное приложение?

Ответы [ 2 ]

3 голосов
/ 21 июля 2009

Создайте объект акции, как описано в опубликованной вами ссылке, и создайте отчет (StockObjectsReport), как они указывают. В этом упрощенном примере я просто добавляю средство просмотра отчетов (crystalReportViewer1) в форму (Form1) и затем использую следующий код в событии Form_Load.

stock s1 = new stock("AWRK", 1200, 28.47);
stock s2 = new stock("CTSO", 800, 128.69);
stock s3 = new stock("LTWR", 1800, 12.95);

ArrayList stockValues = new ArrayList();

stockValues.Add(s1);
stockValues.Add(s2);
stockValues.Add(s3);

ReportDocument StockObjectsReport = new StockObjectsReport();
StockObjectsReport.SetDataSource(stockValues);

crystalReportViewer1.ReportSource = StockObjectsReport;

Это должно заполнить ваш отчет 3 значениями из стандартного объекта в форме Windows.

РЕДАКТИРОВАТЬ: Извините, я только что понял, что ваш вопрос был на VB, но мой пример на C #. Вы должны получить общее представление. :)

0 голосов
/ 12 января 2017

Я загружаю отчет по имени файла, и он отлично работает:

//........

ReportDocument StockObjectsReport;

string reportPath = Server.MapPath("StockObjectsReport.rpt");

StockObjectsReport.Load(reportPath);

StockObjectsReport.SetDataSource(stockValues);

//Export PDF To Disk

string filePath = Server.MapPath("StockObjectsReport.pdf");

StockObjectsReport.ExportToDisk(ExportFormatType.PortableDocFormat, filePath);
...