ReportViewer-Tutorial für Anfänger - Fragethread

  • VB.NET
  • .NET (FX) 4.0

Es gibt 42 Antworten in diesem Thema. Der letzte Beitrag () ist von Pe..CH.

    ReportViewer-Tutorial für Anfänger - Fragethread

    ausgelagert aus ReportViewer-Tutorial für Anfänger ~VaporiZed

    Mal eine blöde Frage, ruft

    VB1963 schrieb:

    VB.NET-Quellcode

    1. .RefreshReport()

    nicht die

    VB1963 schrieb:

    VB.NET-Quellcode

    1. prtReportViewer_ReportRefresh(sender As System.Object, e As System.ComponentModel.CancelEventArgs) Handles prtReportViewer.ReportRefresh

    die dann wiederum wieder

    VB1963 schrieb:

    VB.NET-Quellcode

    1. Aktualisieren()

    aufruft und sich somit im Kreis dreht?

    EDIT: als ich es geschrieben habe, stand der Code im ersten Teil.

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „VaporiZed“ ()

    sonne75 schrieb:

    und sich somit im Kreis dreht?

    Nein das tut es nicht. Das sind zwei verschiedene Sachen:
    Die ReportViewer.RefreshReport-Methode bewirkt, dass der aktuelle Bericht im Berichts-Viewer verarbeitet und gerendert wird. (siehe hier)
    Das ReportViewer.ReportRefresh-Ereignis tritt auf, wenn der Bericht aktualisiert wird. (siehe hier)
    Die .RefreshReport-Methode ruft nicht das .ReportRefresh-Ereignis auf, das hat nichts miteinander zu tun...(obwohl es worttechnisch verwirrt)
    Hallo erst mal,

    ich bin in Sachen Visual Studio ein kompletter Anfänger, da ich bis heute immer nur in VB6 programmiert habe.

    Ich hab mir Visual Studio 2008 Express installiert und wollte einen Report über den Report-Viewer programmieren.
    Im Forum habe ich gelesen, dass dieser nicht autom. integriert ist und habe diesen heruntergeladen und Installiert.

    Ich kann auch die DLL`s in C:\Windows\assmeby sehen, jedoch bekomme ich den Report Viewer in Studio nicht angezeigt.

    Ich habe auch schon "Projekt/Verweise hinzufügen" den Report Viewer gesucht aber einfach nicht gefunden.

    Somit kann ich in der Toolbox (Elemente Auswählen) den Viewer auch nicht einbinden.

    Kann mir jemand helfen ich bin einfach zu blöd glaube ich

    Ach ja Windows 7 64 bit .

    Gruß an Alle.
    Hallo,
    ich habe ein Problem beim DirektDruck,da ich mehrere Unterberichte mit dazugehörigen DataSources habe und beim der Print Anweisung nur eine DataSource angeben kann werden dadurch die Subreports nicht hochgeladen,und anstatt Unterberichten steht dann die Fehlermeldung, hat jmd ne Idee wie ich des lösen kann?

    Antor schrieb:

    da ich mehrere Unterberichte mit dazugehörigen DataSources habe und beim der Print Anweisung nur eine DataSource angeben kann

    Nein - da verstehst du etwas falsch. Bei DirectPrint übergibst du einen LocalReport und in diesem kannst du vorher mehrere Datenquellen adden...
    Schaue im Kapitel #5 (mehrere Tabellen im Bericht) nach, wie dort verschiedene Datenquellen für den LocalReport übergeben werden.
    Das habe ich ja alles gemacht der updateSubreport und bindReport funken einwandfrei,nur wenn ich beim drucken mit dem Quellcode

    VB.NET-Quellcode

    1. Dim rep As New LocalReport
    2. With rep
    3. .ReportEmbeddedResource = String.Concat("Projekt.Hauptbericht.rdlc")
    4. .DataSources.Add(New ReportDataSource("Tebelle", BindingSource))
    5. "hier müssen doch aber auch noch die Unterberichte mit dazugehörigen BindingSources angegeben werden???"
    6. End With

    habe ich ja denn Hauptbericht angegeben mit der dazugehörigen BindingSource ,bei der Vorschau sehe ich alle Reporte und beim drucken wird dann bei mir anstatt Subreports ne Fehlermeldung ausgedruckt

    Bitte in Zukunft VB-Tags benutzen!
    - Solaris

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „Antor“ ()

    Unterberichte erfordern das ReportViewer.LocalReport.SubreportProcessing-Event im Reportviewer, wo du dann den Unterbericht mit den Daten aktualisierst... Siehe oben im Kapitel #5 beim Unterberichtssteuerelement.
    Dieser Report mit einem Unterbericht ist ein interaktiver Bericht, der mit dem Reportviewer gesteuert wird (siehe oben genanntes Event) und über den du den momentanen Berichtsinhalt ausdrucken kannst.
    Das DirectPrinting-Object, wie im letzten Kapitel beschrieben, unterstützt oben genanntes Event nicht und kann nur eine Momentaufnahme eines Berichtes ausdrucken...
    Abhilfe könnte man dadurch erreichen, wenn der Bericht eine Mastertabelle beinhaltet und der Unterbericht als zusätzliche Untertabelle mit den richtigen Daten im Bericht dargestellt wird - also ein Bericht mit mehreren Tabellen. Die Daten werden einfach wie im Post #17 erwähnt dem Object DirectPrint mehrfach in der Datasource geaddet übergeben...
    Edit:
    Ich habe das Object DirectPrinting jetzt einfach um dieses SubreportProcessing-Event erweitert und man kann nun auch Unterberichte direkt drucken (siehe Kapitel #9)

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VB1963“ ()

    Hallo,
    erst mal vielen vielen dank für eins der besten Tutorials die ich je gelesen habe. Ich hab allerdings ein kleines problem, undzwar:

    VB.NET-Quellcode

    1. With ReportViewer1
    2. .LocalReport.ReportEmbeddedResource = " "
    3. [...]
    4. End With

    Hier gebe ich doch quasi den Pfad an, wo die entsprechende rdlc liegt ?

    Das Problem ist, dass ich ein Projekt übernommen habe, welches schon Abteilung373.2 heißt. Der Pfad zum Bericht ist
    /Abteilun373.2/Jahreskonten/Jahresrechnung/Jahresrechnung.rdlc

    Kannst du mir sagen, wie ich das als passendes Argument umschreibe? In etwa doch so oder?

    VB.NET-Quellcode

    1. With ReportViewer1
    2. .LocalReport.ReportEmbeddedResource = "Abteilung373.2.Jahreskonten.Jahresrechnung.Jahresrechnung.rdlc"
    3. [...]
    4. End With

    Ich denke mal es funktioniert aufgrund des Punkts in "Abteilung373.2" nicht, ich weiß aber leider auch keine andere Lösung ?(

    paddy91952 schrieb:

    Ich denke mal es funktioniert aufgrund des Punkts in "Abteilung373.2" nicht
    Ja, das ist auch der Grund... Man sollte Punkt und Sonderzeichen in Projektnamen vermeiden!
    Versuche den Pfad wie folgt anzugeben:

    VB.NET-Quellcode

    1. DeinReportViewer.LocalReport.ReportPath = IO.Path.Combine(Application.StartupPath, "..\..", "Report_MeinersterBericht.rdlc")'"..\.." nur beim Debuggen verwenden!
    das sollte funktionieren, wenn die Reportdatei im Arbeitsverzeichnis abgelegt ist...
    Hallo, vielen Dank erstmal für deine schnelle Hilfe, leider klappt es bei mir immer noch nicht so ganz.

    Der Pfad wird beim Debugen richtig angezeigt allerdings bekomm ich immer noch die Meldung "Fehler bei der lokalen Berichtsverarbeitung."
    In der Fehlerliste wird der eingetragene Pfad rot gekennzeichnet. Hat jemand eine Idee ?

    paddy91952 schrieb:

    Hat jemand eine Idee ?
    Bei mir funktioniert es und kann ich mir das jetzt nicht recht vorstellen. Hat sich dein Report überhaupt im Viewer anzeigen lassen? Kannst du ein kleines Code-Sample hochladen, dass dein Problem abbildet?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VB1963“ ()

    Klar, ich bin über jede Hilfe dankbar

    VB.NET-Quellcode

    1. Option Strict On
    2. Imports Microsoft.Reporting.WinForms
    3. Public Class Jahresrechnung
    4. Private Sub Jahresrechnung_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    5. Aktualisieren()
    6. End Sub
    7. Private Sub Aktualisieren()
    8. Dim Auftragsnummer As New ReportParameter("rpAuftragsNr", "001")
    9. Dim Rechnungsnummer As New ReportParameter("rpVorName", "002")
    10. Dim Kundennummer As New ReportParameter("rpNachName", "1487")
    11. Dim Versanddatum As New ReportParameter("rpVerdandDatum", "1111-1122")
    12. Dim Ansprechpartner As New ReportParameter("rpAnsprechpartner", "Max Mustermann")
    13. Dim telefon As New ReportParameter("rpTelefonNr", "0202 - 6020202")
    14. With ReportViewer1
    15. .LocalReport.ReportPath = Application.StartupPath + "\data\" + "Jahresrechnung.rdlc"
    16. .LocalReport.SetParameters(New ReportParameter() {Auftragsnummer, Rechnungsnummer, Kundennummer, Versanddatum, Ansprechpartner, telefon})
    17. .RefreshReport()
    18. End With
    19. End Sub
    20. Private Sub ReportViewer1_ReportRefresh(sender As Object, e As System.ComponentModel.CancelEventArgs) Handles ReportViewer1.ReportRefresh
    21. Aktualisieren()
    22. End Sub
    23. End Class


    Ich hab lediglich den Pfad ein wenig abgeändert, alerdings auch erst nachdem ich die von dir beschriebene weise schon ausprobiert habe.

    Edit:

    Hey,
    ich habe den Code jetzt einfach in einen Try Catch Block gesetzt und mir den Fehler mit error.tostring anzeigen lassen.
    Hier ist die Fehlerauflistung dann wesentlich genauer (der Fehler wird explizit angezeigt).
    Letztlich hat sich mein Problem gelöst, 2 wirklich dumme Tippfehler (Berichtsparameter konnte nicht gefunden werden).

    Eine Frage hab ich noch dann ist aber wirklich alles klar:
    Ich habe mein Bericht auf die Maße neiner DIN A4 Seite eingestellt. Dennoch scheint die Seite zu Breit und zu lang sein, kannst du mir dazu vilt. noch eine Info geben ?

    vielen vielen Dank für deine Hilfe :)


    Beiträge zusammengefügt
    -Artentus

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „paddy91952“ ()

    Ich muss leider nochmal nerven :S

    Undzwar:
    Wie kann ich den Bericht auf eine DIN A4 Seite konvertrien?
    Bei dem Berichtsentwurf sieht alles so aus wie ich es will. Wenn ich den Bericht im Programm aufrufe (also er im Berichtsviewer) geladen ist, ist auch noch alles super, sobald ich ihn aber zu einer PDF konvertrien lasse, verschieben sich überall die Zeilenabstände, der Bericht ist über 4 Seiten lang und so weiter. Ich verstehe es einfach nicht
    Es wird vermutlich auch beim normalen Ausdrucken nicht passen.
    Schaue einmal in diesen Thread hinein...
    Du musst wahrscheinlich die Seitenränder deines Reports anpassen, da reichen Controls über den Seitenrandbereich hinaus.
    Die Seitenränder kann man per Code oder via Reportdesigner einstellen.
    Hallo zusammen,

    ich wollte noch eine Anmerkung zum hervorragenden Tutorial zur Auslieferung/Deployment einer ReportViewer-Anwendung mit Datenbank-Anbindung machen:

    Ich habe zusätzlich noch die DLL Microsoft.SqlServer.Types.dll im Programmverzeichnis des Ziel-PC's bereitstellen müssen (mal davon ausgehend, dass man den ReportViewer nicht komplett installiert, sondern nur ein Programmverzeichnis bereitstellt).
    Auch wenn die DLL ...SqlServer... heißt - sie war trotzdem nötig, auch wenn ich meine Datenanbindung mit einer MySql.dll zu einer MySql-Datenbank realisiere.

    Ich habe anfangs immer die Fehlermeldung The definition of the report '' is invalid bekommen, bis dann endlich alle benötigten DLL's in der korrekten Version vorlagen (welche das sind und wo man sie findet, siehe ganz am Anfang des Tutorials).

    Welche in meinem Fall genau benötigt werden, habe das analog des folgenden Posts herausgefunden:
    Leeren Report erzeugen, Programm ausliefern, starten, die in der Fehlermeldung angegebene DLL in der korrekten Version mittels Dosbox aus c:\windows\assembly\GAC_MSIL\ kopieren und das ganze so lange wiederholen, bis alle da sind:
    holstcoding.blogspot.de/2015/0…inition-of-report-is.html

    Vielleicht hilft es ja jemandem mal.
    Viel Erfolg!
    Und noch eine Erkenntnis, die ich mit Euch teilen möchte, nachdem es einiges an Recherche gedauert hat, bis bei mir der Cent gefallen ist:

    Ich wollte folgendes Seitenaussehen:
    1. Seite:
    Kopfzeile:
    - Header, der auf jeder Seite erscheinen soll
    - Erklärungstext
    ----------------------------------
    Textkörper:
    - Tabelle (die sich über viele Seiten erstreckt)
    ----------------------------------
    Fußzeile:
    - Datum & Seitenzahl

    2. + folgende Seiten: wie die erste Seite, nur ohne den Erklärungstext.

    Gegoogelt habe ich nach "Kopfzeile erste Seite anders als auf den Folgeseiten" u.ä., leider ohne Ergebnis, da man da einfach nichts einstellen kann (außer dass die Kopf-/Fußzeile auf der ersten/letzten Seite nicht erscheint - gerade verkehrt herum für mich)!
    Die Lösung: den Erklärungstext statt in der Kopfzeile einfach an den Anfang des Textkörpers stellen, dann erscheint er auf der ersten Seite und auf den Folgeseiten nur noch die Tabelle...
    Vielen Dank für dieses hervorragende Tutorial.

    Eine Frage habe ich dennoch, vielleicht weiß es jemand.

    Gibt es eine Möglichkeit, im Menustrip, der automatisch angelegt wird, wenn ich das Reportviewer-Control aus der Toolbox auf die Form ziehe, den voreingestellten Pfad und den Dateinamen beim Export z.B. als pdf zu verändern? Nach Möglichkeit dynamisch, so dass man das nicht immer manuell eingeben muss?

    Vielen Dank und Gruß,
    Volkmar