ADO.NET MS-Report auf Fenster benutzt eigenes DataSet



  • Nachdem ich mir mal die Reporting-Services von ADO.NET angeschaut habe möchte ich einen Bericht in einem Datenbankprogramm einsetzen. Die Ausgangslage ist folgende: AUf dem Hauptfenster ist ein DataGridView welches vom Assistenten wie üblich (DataSet, BindingSource...) an die Datenquelle (MS SQL Server Express) gebunden wurde. Das DataSet enthält die Daten welche selektiert wurden; nicht zwangsläufig die ganze Datenbank. Und GENAU von diesen Daten, die im DataSet enthalten sind möchte ich einen Bericht erstellen.
    Nun fügte ich mittels Assistent einen Bericht hinzu und platzierte auf einem zweiten Form einen ReportViewer. Es funktioniert alles soweit, nur wird die GANZE Datenbank unabhängig vom Hauptfenster geladen; das zweite Fenster lädt mit einem eigenen TableAdapter die Daten neu. Eigentlich ist im Projekt ja ein korrektes DataSet vorhanden, ich versuchte das DataSet aus dem Hauptfenster als Parameter an das zweite Fenster zu übergeben damit diese Daten für den Bericht verwendet werden, der Bericht blieb daraufhin leer.

    Wie mache ich das Ganze richtig?

    Vielen Dank!



  • Hast du das DataSet im Report als DataSource eingetragen? Du kannst sie auch dynamisch zur Laufzeit hinzufügen, dann hilft dir der designer zur Entwurfszeit mit der Auswahl von Datenfeldern jedoch nicht.
    rptGrouped.LocalReport.DataSources.Add(new ReportDataSource("Klinik", ds.Klinik));
    ds.Klinik ist in diesen Beispiel eine Tabelle im DataSet.



  • Danke; hab's eben versucht. Doch wo muss ich die DataSource zuweisen? Im Report-Entwurf selbst geht das ja nicht, das einzig Mögliche wäre das Fenster auf dem der ReportViewer liegt und da versuchte ich es so:

    public frmReport(DVDsDBDataSet DS)
            {
                Daten = DS;
                reportViewer1.LocalReport.DataSources.Add(new Microsoft.Reporting.WinForms.ReportDataSource("DVDs", Daten.DVDs));
               .....}
    

    was eine NullReferenceException erzeugt. Versuchte es auch auf andere Weise (ohne Parameter), auch das DataSet bei den Berichts-Optionen einfach anzuwählen und da erschin im Viewer dann "Die Datenquelle wurde nicht auf eine Instanz festgelegt".
    Ich brauche da noh etwas mehr Informationen 🙂 Allerdings wieso macht der Assistent so einen Sch...? Ist doch ganz und gar nicht unüblich dass man nicht gerade von einer ganzen Tabelle sondern von bereits geladenen Daten einen Bericht möchte!?

    Danke 🙂



  • C. M. Obrecht schrieb:

    Doch wo muss ich die DataSource zuweisen? Im Report-Entwurf selbst geht das ja nicht,

    Wieso nicht? Wenn du den Bericht im Entwurfsmodus siehst gibt es doch den Menüeintrag Report->Data Sources.
    Ich habe ein strongtyped-Dataset gebaut, dieses dort referenziert (bei dir Daten.DVDs) und das konkrete Exemplar (also das DataSet.DataTable deines Forms1) dann an den ReportViewer gebunden. Ich würde mal mit dem Debugger testen ob das Dataset überhaupt zu dem Zeitpunkt konstruiert wurde. Du weist es im ctor des Report-Forms zu, existiert es da schon?



  • Ja den Menueintrag habe ich probiert, da war das DataSet tatsächlich zur Auswahl; nur danach kam eben das mit der fehlenden Instanz im ReportViewer. Das DataSet existiert da schon, man kann erst nachdem es geladen wurde das Berichts-Form öffnen.
    Muss ich das DataSet tatsächlich als Parameter übergeben; ist es nicht eigentlich für das Projekt global, oder eben keine Instanz davon?
    AHa das DataSet direkt an den ReportVIewer binden, das versuche ich!



  • C. M. Obrecht schrieb:

    Muss ich das DataSet tatsächlich als Parameter übergeben; ist es nicht eigentlich für das Projekt global, oder eben keine Instanz davon

    Die Definition des Datasets ist global, welche Tabellen und Spalten usw. aber doch nicht das spezifische Exemplar mit den Daten!



  • Das dachte ich mir; habe es wieder als Parameter übergeben aber es bleibt einfach leer. Kann doch nicht sein! Es geht einfach nicht. Kann man so en Ding überhaupt als Parameter übergeben?


Anmelden zum Antworten