Probleme mit Reportviewer Direktdruck

  • VB.NET

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von heinosh.

    Probleme mit Reportviewer Direktdruck

    Hallo

    Nachdem ich mit meinem Versuch Labels zu drucken gescheitert bin, habe ich mich mit dem Toturial https://www.vb-paradise.de/index.php/Thread/98333-ReportViewer-Tutorial-f%C3%BCr-Anf%C3%A4nger/?postID=853187#post853187

    Leider komme ich jetzt nicht weiter. Es wird nichts gedruckt. Fehler laufen auch nicht auf.
    Nun bin ich mir nicht Sicher ob ich alles richtig gemacht habe.
    Ich benötige mal Hilfe, um den Code richtig zu verstehen.

    VB.NET-Quellcode

    1. Imports Microsoft.Reporting.WinForms
    2. Public Class Form2
    3. Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    4. LS_K_ATableAdapter.Fill(DataLogDataSet.LS_K_A)
    5. LS_PrintTableAdapter.Fill(DataLogDataSet.LS_Print)
    6. Timer.Enabled = True
    7. Timer.Interval = 36000
    8. Statusbar_LabelFE.Text = FELabel1.Text
    9. ToolStripStatusLabel2.Text = Label3.Text
    10. Me.ReportViewer1.RefreshReport()
    11. End Sub
    12. Private Sub IDM_PRINT_Click(sender As Object, e As EventArgs) Handles IDM_PRINT.Click
    13. print()
    14. ' printedLbL.Text = "1"
    15. End Sub
    16. Private Sub Timmer_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer.Tick
    17. If IsNumeric(FELabel1.Text) Then
    18. ' printedLbL.Text = "1"
    19. End If
    20. Me.Validate()
    21. LS_K_ABindingSource.EndEdit()
    22. LS_K_ATableAdapter.Update(DataLogDataSet.LS_K_A)
    23. LS_K_ATableAdapter.Fill(DataLogDataSet.LS_K_A)
    24. LS_PrintTableAdapter.Fill(DataLogDataSet.LS_Print)
    25. Statusbar_LabelFE.Text = FELabel1.Text
    26. ToolStripStatusLabel2.Text = Label3.Text
    27. End Sub
    28. Private Sub print()
    29. Dim Report As New LocalReport
    30. 'ReportViewer1.LocalReport.ReportPath = IO.Path.Combine(Application.StartupPath, "..\..", "Report1.rdlc")
    31. Report.ReportEmbeddedResource = "RDLC_Report.RDLC_Report.bin.Debug.Report1.rdlc"
    32. Report.DisplayName = "RDLC_Report"
    33. Report.DataSources.Add(New ReportDataSource("RDLC_Report", LS_PrintBindingSource))
    34. Dim prt = DirectPrinting.getInstance
    35. Dim response = prt.DirectPrint(Report, False)
    36. End Sub
    37. End Class

    heinosh schrieb:

    Leider komme ich jetzt nicht weiter. Es wird nichts gedruckt. Fehler laufen auch nicht auf.
    1) Verfrachte einmal deinen Code vom Load-Event in das Shown-Event... (was ich weis, werden im Shown-Event Fehler verschluckt)
    2) Passt der Pfad zum Report?
    3) Mache entsprechende Haltepunkte und verfolge deinen Programmablauf... (macht der Code, was du willst?)
    4) Ich verstehe die Sache mit dem Timer nicht?
    5) Hast du deine Probleme im Post vom Jänner lösen können?
    Hallo
    zu 1: Hab ich gemacht, ändert sich aber nichts.
    zu 2: Der Pfad müsste passen.
    zu 3: Da hab ich jetzt endlich eine Meldung. Kann aber damit nicht wirklich was anfangen. ?(

    VB.NET-Quellcode

    1. Public Sub printReport()
    2. If myStreams Is Nothing OrElse myStreams.Count = 0 Then
    3. SystemSounds.Hand.Play()
    4. myResponse = "Print-Error! : Es gibt nichts zu drucken..."
    5. End If
    6. Dim pDoc As New PrintDocument()
    7. Dim rps As ReportPageSettings = myReport.GetDefaultPageSettings() ' PageSettings übergeben
    8. pDoc.DefaultPageSettings.Landscape = rps.IsLandscape ' Längs- oder Querformat
    9. pDoc.DefaultPageSettings.PaperSize = rps.PaperSize ' A4-Format etc.
    10. pDoc.DefaultPageSettings.Margins = rps.Margins ' Ränder
    11. If Not pDoc.PrinterSettings.IsValid Then
    12. SystemSounds.Hand.Play()
    13. myResponse = "Print-Error! : Der Standard-Drucker konnte nicht gefunden werden..."
    14. Else
    15. AddHandler pDoc.PrintPage, AddressOf printPage
    16. myCurrentPage = 0
    17. Try
    18. pDoc.Print()
    19. Catch ex As Exception
    20. SystemSounds.Hand.Play()
    21. myResponse = String.Concat("Print-Error! : ", ex.Message)
    22. End Try
    23. End If
    24. End Sub


    Dort Kommt jetzt in Zeile 7 " Fehler in der Berichtsverarbeitung.
    NullReferenceException: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.

    zu 4: Der Timer soll später alles automatisiert ablaufen lassen. Bitte jetzt einmal ignorieren
    zu 5: Es ist gelöst, z.T. Der Code wird so nicht funktionieren, da das externe Modul die Verbindung zur DB erst trennt, wenn der Code durchgelaufen ist. So die Angabe des Herstellers.

    Deswegen versuch ich das jetzt mit dem Reportviewer , was ja funktioniert, wenn man das wie im Tutorial beschrieben , macht.
    Ich möchte halt nur, das das ohne Klickerei funktioniert. Die Direktprint Methode ist ja eigendlich das was ich will

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

    heinosh schrieb:

    Dort Kommt jetzt in Zeile 7 " Fehler in der Berichtsverarbeitung.
    NullReferenceException: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.
    Das deutet darauf hin (myReport = Nothing), dass du keinen Report an DirectPrint übergibst...
    Blick hier jetzt gar nichts mehr

    Dim Bericht As String = "Report1"

    VB.NET-Quellcode

    1. Private Sub print()
    2. Dim Report As New LocalReport
    3. With Report
    4. .ReportEmbeddedResource = String.Concat("ReportViewerDirectPrinting.Report ", Bericht, ".rdlc")
    5. .DisplayName = Bericht
    6. .DataSources.Add(New ReportDataSource(Bericht, LS_PrintBindingSource))
    7. End With
    8. Dim prt = DirectPrinting.getInstance
    9. Dim response = prt.DirectPrint(Report, False)
    10. End Sub


    was ist da falsch?

    heinosh schrieb:

    was ist da falsch?
    Kannst du mir genau verraten, was jetzt nicht klappt?
    Läuft der Code bis Zeile #13 durch?
    Was gibt dir dann response zurrück?
    Ich vermute, dass es bei Zeile #6 happert - die musst du für dein Projekt anpassen! ReportViewerDirectPrinting ist ja mein Name für mein Projekt...
    Stimmt. Das war falsch.
    Leider druckt er immer noch nicht.
    Wenn man Schritt für Schritt durchlaufen läßt, kommt bei

    Quellcode

    1. response
    folgender Fehler:
    Report-Error! : Microsoft.ReportingServices.ReportProcessing.ProcessingAbortedException: An error has occurred during report processing. ---> Microsoft.ReportingServices.ReportProcessing.ReportProcessingException: Cannot create a data reader for dataset 'DataSet'.
    Ab hier weiß ich auch nicht mehr weiter. Ich vermuste das der Fehler in Zeile 8 liegt. Kann das sein?
    Nein - hier liegt der Fehler im Report selbst...
    Da müsstest du vom Report mehr herzeigen. Ich denke da an eine fehlerhafte Bindung an die Daten...
    Siehe dazu Tutorial Teil3: ReportViewer-Tutorial für Anfänger

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

    Bin Teil 3 nochmal durchgegangen. Hab den Reportviewer auch auf der Form gelassen. Wenn man jetzt es laufen läst, sind die Daten im Reportviewer auf der Form zu sehen. Kann sie auch ausdrucken. Nur bei response wirft er folgenden Fehler aus.
    Report-Error! : Microsoft.ReportingServices.ReportProcessing.ProcessingAbortedException: Fehler bei der Berichtsverarbeitung. ---> Microsoft.ReportingServices.ReportProcessing.ReportProcessingException: Für das DataSet1-Dataset kann kein Datenleser erstellt werden.

    heinosh schrieb:

    Wenn man jetzt es laufen läst, sind die Daten im Reportviewer auf der Form zu sehen. Kann sie auch ausdrucken. Nur bei response wirft er folgenden Fehler aus.
    Wie jetzt - du kannst den Bericht drucken (den ganzen?), obwohl ein Fehler gemeldet wird?
    Da musst du jetzt eine abgespeckte Version, die diesen Umstand zeigt, als Testprojekt hochladen - dann schaue ich es mir an...
    Eigentlich besagt der Fehler, dass er eine bestimmte Tabelle nicht findet und die Daten daher nicht lesen kann...
    In Teil 3 habe ich auch angemerkt, dass bei Dataset im Report eigentlich eine Datentabelle gemeint ist!

    Na ja - du hast natürlich viel von meinem Code vom Tutorial übernommen und nicht deine Datenquelle angegeben
    --> daher kam es zu diesen komischen Fehler, den der Direktprinter nicht ordnungsgemäß verarbeitete (hatte auf so eine Situation noch gar nicht gedacht)...
    Ich habe deine print-Routine einmal auf das Wesentliche reduziert:

    VB.NET-Quellcode

    1. Private Sub print()
    2. Dim rep As New LocalReport
    3. rep.ReportEmbeddedResource = "OSB_LabLabel.Report1.rdlc"
    4. rep.DisplayName = "Mein Bericht"
    5. rep.DataSources.Add(New ReportDataSource("DataSet1", LS_PrintBindingSource))
    6. StatusText.Text = String.Empty
    7. Dim prt = DirectPrinting.getInstance
    8. StatusText.Text = prt.DirectPrint(rep, False)
    9. End Sub

    Beachte Zeile #5 !!!

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