2009-07-16 2 views
4

Ich lerne Crystal Reports (mit VB 2005) zu verwenden.Wie verwendet man Crystal Reports ohne eine eng verbundene DB-Verbindung?

Das meiste von dem, was ich bisher gesehen habe beinhaltet schlürfen Daten direkt aus einer Datenbank, das ist in Ordnung, wenn das alles ist, was Sie im Bericht anzeigen möchten.

Meine Datenbank enthält viele Fremdschlüssel. Daher versuche ich, bei der Darstellung der aktuellen Informationen in meiner App zusätzliche Elemente zu meinen Objekten hinzuzufügen, die Zeichenfolgen (Beschreibungen) der Fremdschlüssel enthalten . Wie:

Class AssetIdentifier 

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

    ... 

Hier ist IdentifierTypeID ein Fremdschlüssel, und ich sehe den Wert in einem anderen Tisch und legen Sie sie in IdentifierType. So habe ich die Textbeschreibung direkt im Objekt und kann sie mit den anderen Sachen herumtragen.

Also, zu meiner Crystal Reports Frage.

Crystal Reports scheint es einfach zu machen, Datensätze in einer bestimmten Tabelle (vor allem mit den Experten) zu verknüpfen, aber das ist alles, was Sie bekommen.

Idealerweise würde ich eine Liste meiner Klassen, wie

Dim assetIdentifiers as New List(Of AssetIdentifier) 

und passieren, dass an einen Crystal Report zu tun, anstatt eine enge Verbindung zu einem bestimmten DB machen möchte, haben die meiste Arbeit getan für mich, aber mich verlassen, um den Teil zu arbeiten, den es nicht tut. Das Nächste, was ich bisher sehen kann, ist ein ADO.NET-Datensatz, aber selbst das scheint weit entfernt zu sein. Ich bin bereits mit Abfragen selbst gut in Ordnung: Ich habe alle Arten von Funktionen, die List (Of Whatever) basierend auf Abfragen zurückgeben.

Gibt es eine einfache Möglichkeit, dies zu tun?

Vielen Dank im Voraus!

UPDATE: OK, fand ich etwas hier:

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

aber es scheint nur diese Fähigkeit für Web-Projekte oder Web-Anwendungen zu geben. Habe ich kein Glück, wenn ich in eine eigenständige Anwendung integrieren möchte?

Antwort

3

Gehen Sie voran und erstellen Sie das Bestandsobjekt wie in dem von Ihnen geposteten Link beschrieben, und erstellen Sie den Bericht (StockObjectsReport) wie angegeben. In diesem vereinfachten Beispiel füge ich einfach einen Bericht-Viewer (crystalReportViewer1) zu einem Formular (Form1) hinzu und verwende dann den folgenden Code im Form_Load-Ereignis.

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; 

Dies sollte Ihren Bericht mit den 3 Werten aus dem Bestandsobjekt in einem Windows Form füllen.

EDIT: Sorry, ich habe gerade festgestellt, dass Ihre Frage in VB war, aber mein Beispiel ist in C#. Sie sollten die allgemeine Idee bekommen. :)

+0

Vielen Dank! Ich musste über die Vorstellung hinausgehen, dass das Tutorial nur für Web-Apps gedacht war. – John

+0

@Dusty Ihre Lösung läuft nicht korrekt. Ausnahme geben StockObjectsReport.SetDataSource (stockValues); an dieser Linie. – AsifQadri

+0

@AsifQadri hast du das jemals gelöst? Ich habe das gleiche Problem. –

0

ich den Bericht von Dateinamen bin Laden und es funktioniert perfekt:

//........ 

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);