Daten aus DataGrid (ohne Datenbank) in einen Report

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von Eki.

    Daten aus DataGrid (ohne Datenbank) in einen Report

    Guten Tag,

    ich schreib zurzeit ein kleines Programm, was Messdaten von el. Geräten verwaltet und am Ende einen Report über den Zustand der Geräte über einen Report ausdruckt.
    Cyrstal Report kann/möchte ich nicht benutzen.

    Ich habe
    - einen Report erstellt Name: Report4.rdlc
    - ein Dataset angelegt mit den einzelenen Spalten. Name des Dataset Berichtstabelle // keinen Tabeladapter angelegt, da Daten vom User noch während der Laufzeit eingetragen werden müssen

    mein Code sieht so aus:
    _________________________________________________

    VB.NET-Quellcode

    1. Private Sub Bericht_Standort_Gruppe()
    2. Dim geraetenummer As String
    3. Dim i, j, k As Integer
    4. Dim ReportDatenTabelle As New DataTable
    5. Dim ReportDaten As New ReportDataSource
    6. Timer1.Stop()
    7. Timer2.Stop()
    8. geraetenummer = ""
    9. SQL_Cmd1.Connection = SQL_Con1
    10. SQL_Cmd2.Connection = SQL_Con2
    11. T_Standort.Text = "Wi44" 'zum Testen
    12. SQL_Cmd2.CommandText = "SELECT Nummer, BEZ1, M01, M06, M02, M08, M09 FROM GER WHERE RAU_NUMMER ='" & T_Standort.Text & "'"
    13. SQL_Con2.Open()
    14. dr1 = SQL_Cmd2.ExecuteReader()
    15. If dr1.HasRows Then
    16. With DataGridvonSophisto
    17. .Rows.Clear()
    18. .Columns.Clear()
    19. .Visible = True
    20. .Columns.Add(0, "Prüfbericht")
    21. .Columns.Add(1, "Inventarnr.")
    22. .Columns.Add(2, "Beschreibung")
    23. .Columns.Add(3, "Arbeitsmitteltyp")
    24. .Columns.Add(4, "Seriennummer")
    25. .Columns.Add(5, "Hersteller")
    26. .Columns.Add(6, "Prüfdatum")
    27. .Columns.Add(7, "nächste")
    28. .Columns.Add(8, "Ergebnis")
    29. .Columns.Add(9, "Prüfart")
    30. .AllowUserToAddRows = False
    31. End With
    32. i = 0
    33. j = 0
    34. While dr1.Read
    35. k = 0
    36. SQL_Befehl = "SELECT ID, Bestanden FROM CAT_MESSDATEN where Geraetenummer ='" & dr1.Item(k) & "'"
    37. SQL_Cmd1.CommandText = SQL_Befehl
    38. SQL_Con1.Open()
    39. dr = SQL_Cmd1.ExecuteReader()
    40. If dr.HasRows Then
    41. dr.Read()
    42. DataGridvonSophisto.Rows.Add(1)
    43. DataGridvonSophisto.Rows(i).Cells(0).Value = dr.Item(0)
    44. DataGridvonSophisto.Rows(i).Cells(1).Value = dr1.Item(0)
    45. DataGridvonSophisto.Rows(i).Cells(2).Value = dr1.Item(1)
    46. DataGridvonSophisto.Rows(i).Cells(3).Value = dr1.Item(2)
    47. DataGridvonSophisto.Rows(i).Cells(4).Value = dr1.Item(3)
    48. DataGridvonSophisto.Rows(i).Cells(5).Value = dr1.Item(4)
    49. DataGridvonSophisto.Rows(i).Cells(6).Value = dr1.Item(5)
    50. DataGridvonSophisto.Rows(i).Cells(7).Value = dr1.Item(6)
    51. DataGridvonSophisto.Rows(i).Cells(8).Value = dr.Item(1)
    52. DataGridvonSophisto.Rows(i).Cells(9).Value = "VDE 0701-0702"
    53. i = i + 1
    54. End If
    55. SQL_Con1.Close()
    56. End While
    57. SQL_Con2.Close()
    58. Hinweis.Close()
    59. With ReportDatenTabelle
    60. .Columns.Add("Prüfbericht")
    61. .Columns.Add("Inventarnr.")
    62. .Columns.Add("Beschreibung")
    63. .Columns.Add("Arbeitsmitteltyp")
    64. .Columns.Add("Seriennummer")
    65. .Columns.Add("Hersteller")
    66. .Columns.Add("Prüfdatum")
    67. .Columns.Add("nächste")
    68. .Columns.Add("Ergebnis")
    69. .Columns.Add("Prüfart")
    70. End With
    71. For i = 0 To DataGridvonSophisto.Rows.Count
    72. [b]--> hier komme ich nicht weiter... Wie bekomme ich die Daten von Grid in die DataTable und dann in den Report, oder ist das sowieso der falsche Ansatz?[/b]
    73. Next i
    74. Else
    75. MsgBox("Standort hat keine Geräte in der Datenbank", MsgBoxStyle.OkOnly, "Hinweis")
    76. SQL_Con1.Close()
    77. SQL_Con2.Close()
    78. End If
    79. End Sub


    Ich bin für jeden Hilfe sehr dankbar.

    Eki

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

    Hallo,
    1.) Willkommen im Forum :D,
    2.) Bitte VB Tags benutzen - was ist damit gemeint? - sonst wird das hier keiner lesen (können)
    3.) rot ist den Mods vorbehalten
    Mir fehlt die Frage an der Frage - 5 Regeln für sinnvolle Fragen

    Edit: Gefunden - Codezeile#89
    --> hier komme ich nicht weiter... Wie bekomme ich die Daten von Grid in die DataTable und dann in den Report, oder ist das sowieso der falsche Ansatz?

    Ja, der Ansatz ist falsch.
    Du mußt nicht das DatagridView befüllen, sondern die DataTable.
    Das DatagridView kannste dann da anbinden, oder kannste auch weglassen.

    Und in den Report bekommste die Daten einfach, indemde den Report an die DataTable anbindest.

    VB.NET-Quellcode

    1. Report.DataSource = myDataTable

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

    Danke für deine Antwort, aber womit ich jetzt Probleme habe ist folgendes

    Mein Code

    VB.NET-Quellcode

    1. ReportViewer1.LocalReport.DataSources.Clear()
    2. DataSet4.Tables.Add(ReportDatenTabelle)
    3. ReportViewer1.Refresh()
    4. ReportViewer1.Visible = True


    Das Problem ist jetzt - der Report wird zwar geöffnet, es stehen jedoch keine Werte darin.

    Die 'ReportDatenTabelle' ist mit Werten gefüllt. Das habe ich geprüft.
    Der ReportViewer1 hat als Bericht den Report6.rdlc
    Im Report6.rdlc wurden Felden aus dem Dataset4 bestückt.
    Die Überschriften werden auch korrekt angezeigt.

    Was mache ich falsch?

    Danke für jede Hilfe

    Eki

    Upps falscher Code

    Upps falscher Code.............

    Sieht so aus


    VB.NET-Quellcode

    1. ' die nächsten 2 Zeile sind zum Testen
    2. i = ReportDatenTabelle.Rows.Count ' Datensätze wurden gefunden
    3. Dim test As String = ReportDatenTabelle.Rows(1).Item(1).ToString ' und in der Tabelle stehen auch Werte
    4. SQL_Con2.Close()
    5. Hinweis.Close()
    6. DataSet4.Tables.Add(ReportDatenTabelle)
    7. Dim DatenfürViewer = New ReportDataSource(ReportDatenTabelle.TableName, ReportDatenTabelle)
    8. ReportViewer1.LocalReport.DataSources.Clear()
    9. reportViewer1.LocalReport.DataSources.Add(DatenfürViewer)
    10. ReportViewer1.Refresh()
    11. ReportViewer1.Visible = True


    ich habe es mit deinem Vorschlag versucht ... sowie ich ihn verstanden habe

    VB.NET-Quellcode

    1. report6.ReportDataSource = ReportDatenTabelle


    aber das nimmt er erst gar nicht an, deshalb habe ich es so versucht.

    Eki