Hallo liebe Community,
ich sitze aktuell vor einem Problem und konnte weder durch dieses Forum noch durch Google mir selbst eine Antwort darauf geben.
Sachverhalt:
Aus einer Datenbank werden via OleDb Datensätze in ein Listview geladen. Der Anwender kann im Listview eine mehrfach Auswahl der Datensätze vornehmen und über einen Menüpunkt einen Druckbefehl geben. Darauf hin werden die Datensätze via For Each Schleife in eine List(of Strings) gespeichert. Es werden dann mit einer weiteren For-Each-Schleife die Daten aus der DB geholt und in Variablen gespeichert. Diese werden dann in in den Bericht übergeben. Der Bericht ist eine Art Karteikarte ähnlich wie in einer Bücherei. Heißt jeder Datensatz soll eig. auf einer eigenen Karteikarte im BerichtViewer zum ausdrucken erscheinen. Bei nur einem Datensatz funktioniert das ganze ohne Probleme. Sobald ich nun mehre Auswähle wird im BerichtViewer nur der letzte Datensatz angezeigt und zum Drucken bereit gestellt.
Code:
Problem:
Wie bekomme ich es hin, das die "Berichts-Ausgabe" zwischengespeichert wird dann der nächste als neue DIN4 Seite an die vorherige Seite angefügt wird? Bei der Beantwortung der Frage möchte ich primär keinen fertigen Code sondern nur Hinweise, mit welcher Funktion ich das ganze umgesetzt bekomme. Gewollt ist, dass jeweils der Bericht in der For-Each-Schleife ausgegeben wird und dann der nächste als neue Seite angefügt wird. Und am Ende der gesamte Bericht angezeigt wird.
Zusatz:
Ich bin selbst nur ein sehr seltener Hobbyprogrammier und besitze warscheinlich nicht die beste Art sauberen Code zu schreiben. Also bitte unterlasst solche Kommentare außer sie dienen der Lösung. Weshalb ich OleDB als Verbindung gewählt habe, ich konnte bisher noch nicht mehr. Der Try-Catch-Block dient nur zu Testzwecken während ich das Programm schreibe, heißt er wird noch entfernt.
Mit freundlichen Grüßen
Manestrum
ich sitze aktuell vor einem Problem und konnte weder durch dieses Forum noch durch Google mir selbst eine Antwort darauf geben.
Sachverhalt:
Aus einer Datenbank werden via OleDb Datensätze in ein Listview geladen. Der Anwender kann im Listview eine mehrfach Auswahl der Datensätze vornehmen und über einen Menüpunkt einen Druckbefehl geben. Darauf hin werden die Datensätze via For Each Schleife in eine List(of Strings) gespeichert. Es werden dann mit einer weiteren For-Each-Schleife die Daten aus der DB geholt und in Variablen gespeichert. Diese werden dann in in den Bericht übergeben. Der Bericht ist eine Art Karteikarte ähnlich wie in einer Bücherei. Heißt jeder Datensatz soll eig. auf einer eigenen Karteikarte im BerichtViewer zum ausdrucken erscheinen. Bei nur einem Datensatz funktioniert das ganze ohne Probleme. Sobald ich nun mehre Auswähle wird im BerichtViewer nur der letzte Datensatz angezeigt und zum Drucken bereit gestellt.
Code:
VB.NET-Quellcode
- Private Sub KarteikartenToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles KarteikartenToolStripMenuItem.Click
- '-- Drucken der Auswahl aus Listview als Karteikarte -- Arry -> Dataset -> Bericht
- '-- Kürzen der Felder auf 300 Zeichen und anfügen von "..."
- Dim itmx As ListViewItem 'Dient der Multiauswahl und des Druckens mehrerer Datensätze
- Dim DatensatzKarteiKarte As New List(Of String)
- For Each itmx In lsv1.SelectedItems
- DatensatzKarteiKarte.Add(itmx.SubItems(0).Text)
- Next
- For Each Datensatz As String In DatensatzKarteiKarte
- Dim dt As New DataSetBericht
- Dim da As OleDbDataAdapter
- Dim bs As New BindingSource
- da = New OleDbDataAdapter("SELECT * from Pyramiden WHERE NR='" & Datensatz & "'", dbconnection)
- da.Fill(dt, "Pyramiden")
- Dim Lokalisierung As String = dt.Tables("Pyramiden").Rows(0).Item("LOKALISIERUNG").ToString
- Dim Literatur As String = dt.Tables("Pyramiden").Rows(0).Item("LITERATUR").ToString
- Dim Bemerkung As String = dt.Tables("Pyramiden").Rows(0).Item("BEMERKUNG").ToString
- Dim Bauherr As String = dt.Tables("Pyramiden").Rows(0).Item("BAUHERR").ToString
- Dim Architekt As String = dt.Tables("Pyramiden").Rows(0).Item("ARCHITEKT").ToString
- Dim Ort As String = dt.Tables("Pyramiden").Rows(0).Item("ORT").ToString
- Dim Objekt As String = dt.Tables("Pyramiden").Rows(0).Item("OBJEKT").ToString
- If Bemerkung.Length > 500 Then
- Bemerkung = Bemerkung.Substring(0, 500) & "..."
- End If
- If Bauherr.Length > 500 Then
- Bauherr = Bauherr.Substring(0, 500) & "..."
- End If
- If Objekt.Length > 500 Then
- Objekt = Objekt.Substring(0, 500) & "..."
- End If
- If Architekt.Length > 500 Then
- Architekt = Architekt.Substring(0, 500) & "..."
- End If
- If Ort.Length > 500 Then
- Ort = Ort.Substring(0, 500) & "..."
- End If
- If Lokalisierung.Length > 500 Then
- Lokalisierung = Lokalisierung.Substring(0, 500) & "..."
- End If
- Dim Nr As New ReportParameter("Nr", dt.Tables("Pyramiden").Rows(0).Item("NR").ToString)
- Dim Objektshort As New ReportParameter("Objekt", Objekt.ToString)
- Dim Ortshort As New ReportParameter("Ort", Ort.ToString)
- Dim LokalisierungShort As New ReportParameter("Lokalisierung", Lokalisierung.ToString)
- Dim BemerkungShort As New ReportParameter("Bemerkung", Bemerkung.ToString)
- Dim LiteraturShort As New ReportParameter("Literatur", Literatur.ToString)
- Dim Typ As New ReportParameter("Typ", dt.Tables("Pyramiden").Rows(0).Item("TYP").ToString)
- Dim Bild As New ReportParameter("Bild", dt.Tables("Pyramiden").Rows(0).Item("BILD").ToString)
- Dim Fremdnutzung As New ReportParameter("Fremdnutzung", dt.Tables("Pyramiden").Rows(0).Item("FREMDNUTZUNG").ToString)
- Dim Grab As New ReportParameter("Grab", dt.Tables("Pyramiden").Rows(0).Item("GRAB").ToString)
- Dim Sarkophag As New ReportParameter("Sarkophag", dt.Tables("Pyramiden").Rows(0).Item("SARKOPHAG").ToString)
- Dim Freimaurer As New ReportParameter("Freimaurer", dt.Tables("Pyramiden").Rows(0).Item("FREIMAURER").ToString)
- Dim Dia As New ReportParameter("Dia", dt.Tables("Pyramiden").Rows(0).Item("DIA").ToString)
- Dim Erhalten As New ReportParameter("Erhalten", dt.Tables("Pyramiden").Rows(0).Item("ERHALTEN").ToString)
- Dim Höhe As New ReportParameter("Höhe", dt.Tables("Pyramiden").Rows(0).Item("HÖHE").ToString)
- Dim Breite As New ReportParameter("Breite", dt.Tables("Pyramiden").Rows(0).Item("BREITE").ToString)
- Dim Länge As New ReportParameter("Länge", dt.Tables("Pyramiden").Rows(0).Item("LÄNGE").ToString)
- Dim Memokurz As New ReportParameter("Memokurz", dt.Tables("Pyramiden").Rows(0).Item("MEMOKURZ").ToString)
- Dim Maß As New ReportParameter("Maß", dt.Tables("Pyramiden").Rows(0).Item("MAß").ToString)
- Dim Neigung As New ReportParameter("Neigung", dt.Tables("Pyramiden").Rows(0).Item("NEIGUNG").ToString)
- Dim Jahr As New ReportParameter("Jahr", dt.Tables("Pyramiden").Rows(0).Item("JAHR").ToString)
- Dim Bauherrshort As New ReportParameter("Bauherr", Bauherr.ToString)
- Dim Architektshort As New ReportParameter("Architekt", Architekt.ToString)
- Dim Memo As New ReportParameter("Memo", dt.Tables("Pyramiden").Rows(0).Item("MEMO").ToString)
- Dim Plan As New ReportParameter("Plan", dt.Tables("Pyramiden").Rows(0).Item("PLAN").ToString)
- Try
- Berichttest.rpviewer.Reset()
- Berichttest.rpviewer.ProcessingMode = ProcessingMode.Local
- With Berichttest.rpviewer
- .LocalReport.ReportPath = "Karteikarte.rdlc"
- .LocalReport.SetParameters(New ReportParameter() {Nr, Objektshort, Ortshort, LokalisierungShort, BemerkungShort, LiteraturShort, Typ, Bild, Fremdnutzung, Grab, Sarkophag, Freimaurer, Dia, Erhalten, Höhe, Breite, Länge, Memokurz, Maß, Neigung, Jahr, Bauherrshort, Architektshort, Memo}) ' Parameterübergabe
- .RefreshReport()
- End With
- Catch ex As Exception
- ErrorToString()
- End Try
- Next
- Berichttest.Show()
Problem:
Wie bekomme ich es hin, das die "Berichts-Ausgabe" zwischengespeichert wird dann der nächste als neue DIN4 Seite an die vorherige Seite angefügt wird? Bei der Beantwortung der Frage möchte ich primär keinen fertigen Code sondern nur Hinweise, mit welcher Funktion ich das ganze umgesetzt bekomme. Gewollt ist, dass jeweils der Bericht in der For-Each-Schleife ausgegeben wird und dann der nächste als neue Seite angefügt wird. Und am Ende der gesamte Bericht angezeigt wird.
Zusatz:
Ich bin selbst nur ein sehr seltener Hobbyprogrammier und besitze warscheinlich nicht die beste Art sauberen Code zu schreiben. Also bitte unterlasst solche Kommentare außer sie dienen der Lösung. Weshalb ich OleDB als Verbindung gewählt habe, ich konnte bisher noch nicht mehr. Der Try-Catch-Block dient nur zu Testzwecken während ich das Programm schreibe, heißt er wird noch entfernt.
Mit freundlichen Grüßen
Manestrum