Drucken des Inhalts eines Datagridview / Dataset über mehrere Seiten in VB Net

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 63 Antworten in diesem Thema. Der letzte Beitrag () ist von silverbob76GE.

    @silverbob76GE Mach mal ein kleines Beispielprojekt mit einer dynamisch befüllten DataTable, das diesen Effekt reproduziert und hänge dies ohne bin und obj als ZIP an.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hi @Dksksm

    Nunja, ich hatte ursprünglich einen untypsierten Zugriff auf mein typsiertes DataSet. Das habe ich dann dank @Akanel und @VaporiZed mit dem DirectCast geändert.
    Bin dann davon ausgegangen, das ich beim iterieren auch den DirectCast verwenden muss. Hatte vorher durch die DGV iteriert, was ja auch funzt.
    Aber du hast recht, kann auch durch die DataTable iterieren.

    Hab da allerdings noch ein anderes Prob. In dem DataSet schreibe ich in einige Zellen mit dem Datentyp system.decimal. Die Zahlen sind eigentlich Währungen (Preise).
    Wenn ich die Daten in das DataSet schreibe, haben die Zahlen im 1000er Zahelnformat keinen Punkt. Beim Druck dieser Zellen werden die Zahlen dann natürlich ohne Punkt dargestellt.

    Wie bekomme ich es hin, das die Zellen im Zahlenformat mit 1000er Trennzeichen und Nachkommastellen dargestellt werden.

    Irgendwie funzt das aber nicht.

    VB.NET-Quellcode

    1. For i = index to Gesamtangebote.Alleangebote.Rows.Count -1
    2. ep = currentpositionrow._Preis__inkl__Fracht_
    3. gp = currentpositionrow.Netto
    4. g.DrawString(CStr(ep), fntText, Brushes.Black, xEP, Y + 30)
    5. g.DrawString(CStr(gp), fntText, Brushes.Black, xGP, Y + 30)
    6. Next


    Durch den Bezug der Zelle zum DirecCast hänge ich immer in der gleichen Zeile fest

    VB.NET-Quellcode

    1. Dim currentrow = DirectCast(DirectCast(AlleangeboteBindingSource.Current, DataRowView).Row, Gesamtangebote.AlleangeboteRow)





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

    silverbob76GE schrieb:


    Wie bekomme ich es hin, das die Zellen im Zahlenformat mit 1000er Trennzeichen und Nachkommastellen dargestellt werden.


    .ToString("C")

    silverbob76GE schrieb:


    Irgendwie funzt das aber nicht.


    Wo hast Du denn auch currentpositionrow her? Sicher nicht aus der Iteration. Da hat nichts einen Bezug zum DirectCast zu haben.

    VB.NET-Quellcode

    1. For Each alleangeboteRow As DataRow In Gesamtangebote.Alleangebote.Rows
    2. ep = alleangeboteRow ._Preis__inkl__Fracht_
    3. gp = alleangeboteRow .Netto
    4. g.DrawString(ep.ToString("C"), fntText, Brushes.Black, xEP, Y + 30)
    5. g.DrawString(gp.ToString("C"), fntText, Brushes.Black, xGP, Y + 30)
    6. Next


    Ungestestet das alles.
    @Dksksm Geht aber trotzdem nicht. :/

    silverbob76GE schrieb:

    Wie bekomme ich es hin, das die Zellen im Zahlenformat mit 1000er Trennzeichen und Nachkommastellen dargestellt werden.
    Probier mal dies:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    2. Dim Provider = System.Threading.Thread.CurrentThread.CurrentCulture.NumberFormat
    3. Dim value = 12345.6789
    4. Label1.Text = value.ToString(Provider)
    5. Label2.Text = value.ToString("0.000", Provider)
    6. Label3.Text = value.ToString("n3", Provider) ' dieseer ist ansders
    7. End Sub
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @RodFromGermany & @Dksksm

    Der Tip mit der Währung von @Dksksm funktioniert.

    Bloß beim iterieren gehts net. ich bekomme keinen Zugriff auf die einzelnen Spalten, wenn ich es so mache wie @Dksksm geschrieben hat:

    VB.NET-Quellcode

    1. ep = alleangeboterow. => liefert mir keinen Zugriff auf die Spalten. Intellisense zeigt die Spaltennamen nicht an.


    Dksksm schrieb:

    Wo
    hast Du denn auch currentpositionrow her? Sicher nicht aus der
    Iteration. Da hat nichts einen Bezug zum DirectCast zu haben.


    Das ist die Bindingsource, die ich mit DirectCast anspreche.

    VB.NET-Quellcode

    1. Dim currentrow =
    2. DirectCast(DirectCast(AlleangeboteBindingSource.Current,
    3. DataRowView).Row, Gesamtangebote.AlleangeboteRow)


    Mein fehler. Mit
    Irgendwie funzt das aber nicht.
    meinte ich eigentlich, das das mit dem DataSet und dem DirectCast, das ich da nicht durchlaufen kann.


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

    Irgendwie hast Du nicht verstanden.....
    Dein DirectCast spricht über die Bindingssource genau einen DATENSATZ an, nämlich den aktuellen, der in der Bindingsource grade gewählt ist, durch die aktive Zeile deines DGV.
    Das alles kannst Du für das Drucken einer ganzen TABELLE vergessen, also löse Dich davon.

    Auf deiner Form macht der Name des Datensets ein kleines Problem, weil der Name identisch geschrieben ist wie das DS selbst
    Ich habe auf der Form "Gesamtangebote" in gesamtangebote geändert.



    In dem Moment ging auch zu schreiben:

    VB.NET-Quellcode

    1. For Each alleangeboteRow As Gesamtangebote.AlleangeboteRow In gesamtangebote.Alleangebote
    2. Next


    Nachtrag: Deine Tabelle "Alleangebote" ist leider ganz anders aufgebaut, als Du schreibst:
    In dem DataSet schreibe ich in einige Zellen mit dem Datentyp system.decimal. Die Zahlen sind eigentlich Währungen (Preise).
    Nö, da sind nur Strings drinnen, ausser "ID" und "Pos". Wenn Du decimal speichern willst, dann tu es auch. Damit kann man rechnen, die kann man formatiert ausgeben, je nach Währung anders. Strings sind Strings, also bereits eine Zeichenkette. Leider völliger Quark.

    Nachtrag2: mit einer For - Next -Schleife die Anzahl der DGV Zeilen zu durchflöhen ist nicht besonders geschickt, wenn man sowieso nur auf die aktuelle Row aus der Bindingssource zugreift, die sich ja vor allem nicht verändert ;)
    Nachtrag3: Einen String an einen anderen String zu übergeben um ihn dann zu drucken ist sinnfrei, Du kannst Das Feld "_Preis__inkl__Fracht_" (Beispiel) sowieso direkt drucken. Erstens es ist schon ein String und zweitens könnte man, wäre es vom Datentyp Decimal oder Double den Wert mit .ToString("n2", Provider) gleich richtig formatiert ausgeben.

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

    Dksksm schrieb:

    was geht nicht?

    silverbob76GE schrieb:

    Zahlenformat mit 1000er Trennzeichen
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @Dksksm

    Danke für deinen Hinweis. Das der DirectCast genau einen Datensatz anspricht habe ich verstanden, leider etwas zu spät. Daher ja auch meine Frage, wie ich das Problem lösen kann. Wußte halt nicht wie. Ich hab auf die schnelle ein Beispielprojekt erstellt, daher auch die falschen Datenformate. In meiner Prog habe ich die Spalten als Decimal.

    Nachtrag2: mit einer For - Next -Schleife die Anzahl der DGV Zeilen zu durchflöhen ist nicht besonders geschickt, wenn man sowieso nur auf die aktuelle Row aus der Bindingssource zugreift, die sich ja vor allem nicht verändert

    Die For Schleife soll ja das komplette DataTable durchlaufen. Das der DirectCast da fehl am Platz ist, war mir auch klar.
    Nur wollte ich nicht auf ein typisiertes DataSet untypisiert zugreifen auch wenns funktioniert.

    Nachtrag3: Einen String an einen anderen String zu übergeben um ihn dann zu drucken ist sinnfrei, Du kannst Das Feld "_Preis__inkl__Fracht_" (Beispiel) sowieso direkt drucken. Erstens es ist schon ein String und zweitens könnte man, wäre es vom Datentyp Decimal oder Double den Wert mit .ToString("n2", Provider) gleich richtig formatiert ausgeben.


    Ist klar, aber wie gesagt, in meiner Prog ist der Datentyp auf decimal. Hatte den Fehler auf die schnelle in der Beispiel App nicht bemerkt.

    By the way, Fehler passieren. Wenn man keine Fehler machen würde, würde man sich nicht verbessern. Bin halt noch Newbie in sehr vielen Bereichen im programmieren. Das ich da Hilfe so einem Forum suche wie viele andere, ist denke ich selbstverständlich. Habe bevor ich hier einen Thread eröffnet habe, viel gegoogelt, viel gelesen, Videos von EdR geschaut. Allerdings ist es gerade am Anfang so das man nicht alles versteht und dann und wann auch Starthilfe braucht.

    Danke für eure Hilfe. Finds echt toll von euch. War schon echt verzweifelt und kurz davor, arbeit von ca. 2 Monaten einfach wieder aufzugeben weil es einfach nicht mehr weiterging.
    Ich klink mich nochmal (viel zu spät) ein. Habe das Gefühl, dass das hier ein wenig fahrig wird. Ich komm gar nicht mehr hinterher, was das aktuelle Problem ist.
    Der mehrseitige Druck klappt grundsätzlich?
    Kannst Du nun typisiert Dein ganzes tDS bzw. die DataTable durchlaufen?
    Welche Probleme gibt es jetzt noch?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    silverbob76GE schrieb:


    Die For Schleife soll ja das komplette DataTable durchlaufen. Das der DirectCast da fehl am Platz ist, war mir auch klar.
    Nur wollte ich nicht auf ein typisiertes DataSet untypisiert zugreifen auch wenns funktioniert.


    Ich habe Dir im Post#49 eine funktionierende Lösung gepostet. Da bietet man eine Lösung an und es wird nicht drauf eingegangen.
    Ich habe Dir im Post#49 eine funktionierende Lösung gepostet. Da bietet man eine Lösung an und es wird nicht drauf eingegangen.


    Wo hast du heraus gelesen, das ich auf deinen Vorschlag nicht eingegangen bin? Das Zitat bezog sich zur Erläuterung auf eine Situation, die zum Anfang des Threads erläutert wurde.

    Mein Zitat bezog sich darauf, das ich mit dem DirectCast falsch lag und nicht weiter wusste. Am Anfang des Threads hatte ich einen untypisierten Zugriff auf das DataTable. @VaporiZed hat mir zu verstehen gegeben, das der DirectCast einen typisierten Zugriff ermöglicht, den ich bis dahin noch nicht verstanden hatte. Das hab ich erst mal umgesetzt, wobei ich dann in der aktuellen Zeile des DGV, so wie du - @Dksksm - ja schon erkannt hast, quasi gefangen war.

    @VaporiZed : Hab den DirectCast wie von dir vorgeschlagen eingesetzt, allerdings führte das nicht ganz zum Ziel, da ich durch ".current" immer wieder in der gleichen Zeile war. @Dksksm hat das erkannt und mir den Code genannt (danke dafür), das ich auf das DataTable zugreifen kann um alle Datensätze in einer For-Schleife zu durchlaufen.

    Den Druck der mehrseitigen PDF habe ich im Moment zumindest gelöst. Teste gerade noch alle Eventualitäten.
    @RodFromGermany,@Akanel, @Dksksm und du habt mir enorm weitergeholfen. Stand vor Problemen, die ich trotz viel googeln und Recherche hier im Forum selbst nicht gelöst hätte.

    Ich kann jetzt dank @Dksksm's Tip das DataTable durchlaufen, typisiert. Im Moment widerholen sich die Datensätze auf unterschiedlichen Seiten, aber muss da genau schauen wie ich das hinbekomme. Bin einen großen Schritt weiter, mal sehen was da noch kommt.

    Will nur klarstellen, das ich die Vorschläge hier schon ernst nehme, sonst machts ja keinen Sinn in nem Forum Hilfe zu suchen und das angebotene dann nicht umzusetzen, richtig? Möchte ja auch gern was dazu lernen, aber lasse mir auch nicht vorwerfen, ich würde nicht umsetzen, was man mir als Ansatz vorschlägt.
    Ah, ok, klar soweit. Nee, dass mein Tip mit dem Current nicht den Durchbruch brachte, ist mir klar. Aber wenn Du den größten Teil der aktuellen Probleme bewältigt hast, ist doch schon mal was gewonnen. Gib einfach bescheid, wenn's wieder knifflig wird. Ich hoffe, dass ich dann früher (und gezielter) helfen kann :rolleyes:
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    hi @VB1963

    Nein, habe ich nicht. Habs zwar gesehen, aber hatte dann für mich entschieden, das ich es mit dem Tut von @RodFromGermany versuche.

    Klappt soweit auch ganz gut, aber immer wieder treten hier und da Sachen auf, an denen ich arbeite. Ich werd mir das Tut aber anschauen, eventuell ist es ja die passendere Lösung.
    @silverbob76GE Wenn Du die auftretenden Probleme ordentlich beschreibst, können wir Dir auch besser helfen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Hi Leute

    kleines Update. Habs jetzt endlich hinbekommen, das die unterschiedlichen Seiten gedruckt werden (Seite 1 mit Kopfzeile, Seite 2 nur noch Positionszeilen, Seite X Positionszeilen + Schlußtext)
    .
    Allerdings konnte ich mit der For each Schleife von @Dksksm nicht das DataSet so durchlaufen, wie es brauche. Ich muss eine Variable beim durchlaufen des DataSets mitlaufen lassen, damit ich die Positionsnummer im Angebot korrekt zählen / darstellen kann. Da ich es nicht anders hinbekommen habe, musste ich es trotzdem mit einem untypisierten Zugriff auf das DataSet machen.
    Ist vermutlich nicht die eleganteste Lösung, aber Sie funzt. Würde den Zugriff zwar gern typisiert erstellen, weiß aber nicht wie.

    Vielleicht hilft der Code ja dem ein oder anderen bei einem ähnlichen Problem weiter.

    Hier mal das komplette PrintPage Event.
    Spoiler anzeigen

    Quellcode

    1. Dim margin = PrintDocument1.DefaultPageSettings.Margins
    2. Dim g = e.Graphics
    3. margin.Left = 30
    4. margin.Right = 30
    5. margin.Top = 30
    6. margin.Bottom = 30
    7. leftMargin = margin.Left
    8. rightMargin = margin.Right
    9. topMargin = margin.Top
    10. bottomMargin = margin.Top
    11. Dim rc = e.Graphics.VisibleClipBounds
    12. rc.Offset(margin.Left + 30, margin.Top + 30) ' obere linke Ecke
    13. rc.Width -= (margin.Left + 20 + margin.Right - 20) ' neue Breite
    14. rc.Height -= (margin.Top + margin.Bottom) ' neue Höhe
    15. g.DrawRectangle(Pens.Gray, margin.Left, margin.Top, rc.Width, rc.Height)
    16. PrintDocument1.DocumentName = Label64.Text
    17. Kopfzeile1 = "Angebot an " & tbkunde.Text & " - vom " & Date.Now.ToShortDateString
    18. If tbanfragenummer.Text = "" Then
    19. Kopfzeile2 = "BV " + tbkommission.Text + " in " + tbplz1.Text + " " + tblieferort.Text
    20. ElseIf tbanfragenummer.Text = "" And tbkommission.Text = "" Then
    21. Kopfzeile2 = "BV in " + tbplz1.Text + " " + tblieferort.Text
    22. ElseIf tbkommission.Text = "" Then
    23. Kopfzeile2 = "Anfragenummer " + tbanfragenummer.Text + " - BV in " + tbplz1.Text + " " + tblieferort.Text
    24. Else
    25. Kopfzeile2 = "Anfragenummer " + tbanfragenummer.Text + " - BV " + tbkommission.Text + " in " + tbplz1.Text + " " + tblieferort.Text
    26. End If
    27. Logo = "c:\users\" + Environment.UserName + "\desktop\Kingspan Logo.jpg"
    28. X = leftMargin
    29. Y = topMargin
    30. If pagenb = 0 Then
    31. If File.Exists(Logo) Then
    32. Dim ologo As Image = Image.FromFile(Logo)
    33. Dim bmp As New Bitmap(ologo, 180, 95)
    34. g.DrawImage(bmp, 600, margin.Top + 25)
    35. End If
    36. If (Kopfzeile1 <> "") Then
    37. Y += 40
    38. g.DrawString(Kopfzeile1, Angebotstitelschrift, Brushes.Black, X + 20, Y)
    39. End If
    40. If (Kopfzeile2 <> "") Then
    41. Y += 20
    42. g.DrawString(Kopfzeile2, Angebotstitelschrift, Brushes.Black, X + 20, Y)
    43. End If
    44. Y += 15
    45. 'Druckdaten zur Firma setzen
    46. 'Zeilen an den Kunden
    47. Y += 40
    48. g.DrawString("Kingspan GmbH | Am Schornacker 2 | 46485 Wesel", fntText, BlackBrush, X + 20, Y)
    49. Y += 30
    50. g.DrawString("Angebot an" & vbTab & vbTab & ": " & tbkunde.Text, fntText, Brushes.Black, X + 20, Y)
    51. Y += 20
    52. g.DrawString("Ansprechpartner" & vbTab & vbTab & ": " & tbansprech.Text, fntText, Brushes.Black, X + 20, Y)
    53. Y += 20
    54. g.DrawString("Anfragenummer" & vbTab & vbTab & ": " & tbanfragenummer.Text, fntText, Brushes.Black, X + 20, Y)
    55. Y += 20
    56. g.DrawString("PLZ / Lieferort" & vbTab & vbTab & ": " & tbplz1.Text & " / " & tblieferort.Text, fntText, Brushes.Black, X + 20, Y)
    57. Y += 20
    58. g.DrawString("BV / Kommission" & vbTab & vbTab & ": " & tbkommission.Text, fntText, Brushes.Black, X + 20, Y)
    59. 'Zeilen für Verkauf und Innendienst
    60. Dim xverkauf As Integer = leftMargin + 450
    61. Y = 180
    62. g.DrawString("Verkaufsleiter" & vbTab & ": " & cboVerkaufsleiter.Text, fntText, Brushes.Black, xverkauf, Y)
    63. Y += 20
    64. g.DrawString("Tel." & vbTab & vbTab & ": " & tbtelA.Text, fntText, Brushes.Black, xverkauf, Y)
    65. Y += 20
    66. g.DrawString("Fax." & vbTab & vbTab & ": " & tbfaxA.Text, fntText, Brushes.Black, xverkauf, Y)
    67. Y += 20
    68. g.DrawString("E-Mail" & vbTab & vbTab & ": " & tbemailA.Text, fntText, Brushes.Black, xverkauf, Y)
    69. Y += 20
    70. g.DrawString("Mobil" & vbTab & vbTab & ": " & tbmobilA.Text, fntText, Brushes.Black, xverkauf, Y)
    71. Y += 20
    72. g.DrawString("Innendienst:" & vbTab & ": " & cboInnendienst.Text, fntText, Brushes.Black, xverkauf, Y)
    73. Y += 20
    74. g.DrawString("Tel." & vbTab & vbTab & ": " & tbtelI.Text, fntText, Brushes.Black, xverkauf, Y)
    75. Y += 20
    76. g.DrawString("Fax" & vbTab & vbTab & ": " & tbfaxI.Text, fntText, Brushes.Black, xverkauf, Y)
    77. Y += 20
    78. g.DrawString("E-Mail" & vbTab & vbTab & ": " & tbemailI.Text, fntText, Brushes.Black, xverkauf, Y)
    79. Y += 40
    80. 'Angebotsdatum
    81. g.DrawString(Date.Now.ToShortDateString, fntText, Brushes.Black, xverkauf + 220, Y)
    82. 'Angebotstext
    83. Y += 15
    84. g.DrawString("Sehr geehrte Damen und Herren,", fntText, Brushes.Black, X + 20, Y)
    85. Y += 30
    86. g.DrawString("wir danken Ihnen für Ihre Anfrage und unterbreiten Ihnen unser für Sie kostenlos ausgearbeitetes Angebot wie folgt:", fntText, Brushes.Black, X + 20, Y)
    87. Y += 25
    88. Dim mybrush As SolidBrush = New SolidBrush(Color.LightGray)
    89. g.FillRectangle(mybrush, X + 20, Y, X + 710, 25) 'Y-Pos = 460 am unteren Ende des Rechtecks
    90. 'Tabellenkopfzeilen
    91. X = X + 30
    92. Y = Y + 5 'Y-Pos = 430
    93. Dim xPos As Integer = X + 5
    94. Dim XBeschreibung As Integer = xPos + 35
    95. Dim xLänge As Integer = XBeschreibung + 320
    96. Dim xStück As Integer = xLänge + 80
    97. Dim xMenge As Integer = xStück + 80
    98. Dim xEP As Integer = xMenge + 80
    99. Dim xGP As Integer = xEP + 70
    100. g.DrawString("Pos.", Angebotstitelschrift, Brushes.Black, X, Y)
    101. g.DrawString("Beschreibung", Angebotstitelschrift, Brushes.Black, XBeschreibung, Y)
    102. g.DrawString("Länge", Angebotstitelschrift, Brushes.Black, xLänge, Y)
    103. g.DrawString("Stück", Angebotstitelschrift, Brushes.Black, xStück, Y)
    104. g.DrawString("Menge", Angebotstitelschrift, Brushes.Black, xMenge, Y)
    105. g.DrawString("EP (€)", Angebotstitelschrift, Brushes.Black, xEP, Y)
    106. g.DrawString("GP (€)", Angebotstitelschrift, Brushes.Black, xGP, Y)
    107. Dim pos As String
    108. Dim element As String
    109. Dim beschreibung As String
    110. Dim dicke As String
    111. Dim länge As String
    112. Dim stück As String
    113. Dim menge As String
    114. Dim ep As Decimal
    115. Dim gp As Decimal
    116. Dim mwst As Decimal
    117. Dim netto As Decimal
    118. Dim brutto As Decimal
    119. Dim pen1 As New Pen(Brushes.Black, 0.5)
    120. Dim i As Integer = 0
    121. Y = Y + 25 'Y-Pos = 485
    122. For i = index To kundenangebot.Einzelangebot.Rows.Count - 1
    123. netto = CDec(kundenangebot.Einzelangebot.Rows(i).Item("Netto").ToString)
    124. mwst = CDec(kundenangebot.Einzelangebot.Rows(i).Item("MwSt").ToString)
    125. brutto = CDec(kundenangebot.Einzelangebot.Rows(i).Item("Brutto").ToString)
    126. element = kundenangebot.Einzelangebot.Rows(i).Item("Element").ToString
    127. dicke = kundenangebot.Einzelangebot.Rows(i).Item("Kerndicke").ToString
    128. brutto = netto + mwst
    129. pos = kundenangebot.Einzelangebot.Rows(i).Item("Pos").ToString
    130. länge = kundenangebot.Einzelangebot.Rows(i).Item("Länge").ToString
    131. stück = kundenangebot.Einzelangebot.Rows(i).Item("Stück").ToString
    132. menge = kundenangebot.Einzelangebot.Rows(i).Item("Menge").ToString
    133. ep = CDec(kundenangebot.Einzelangebot.Rows(i).Item("Preis (inkl. Fracht)").ToString)
    134. gp = CDec(kundenangebot.Einzelangebot.Rows(i).Item("Netto").ToString)
    135. element = kundenangebot.Einzelangebot.Rows(i).Item("Anwendung").ToString & " " & kundenangebot.Einzelangebot.Rows(i).Item("Element").ToString
    136. Dim j As Integer
    137. j = 10 + (currentrecord * 10)
    138. beschreibung = "Kerndicke" & vbTab & vbTab & kundenangebot.Einzelangebot.Rows(i).Item("Kerndicke").ToString _
    139. & vbCrLf _
    140. & "Dämmkern" & vbTab & vbTab & kundenangebot.Einzelangebot.Rows(i).Item("Dämmkern").ToString & vbCrLf _
    141. & "U-Wert" & vbTab & vbTab & vbTab & kundenangebot.Einzelangebot.Rows(i).Item("U-Wert").ToString & " W/m²K" & vbCrLf _
    142. & "Stahldicke (A/I)" & vbTab & vbTab & kundenangebot.Einzelangebot.Rows(i).Item("Stahldicke (A/I)").ToString & vbCrLf _
    143. & "Profilierung (A/I)" & vbTab & vbTab & kundenangebot.Einzelangebot.Rows(i).Item("Profilierung (A/I)").ToString & vbCrLf _
    144. & "Beschichtung (A/I)" & vbTab & vbTab & kundenangebot.Einzelangebot.Rows(i).Item("Beschichtung (A/I)").ToString & vbCrLf _
    145. & "Farbton (A/I)" & vbTab & vbTab & kundenangebot.Einzelangebot.Rows(i).Item("Farbton (A/I)").ToString
    146. element = kundenangebot.Einzelangebot.Rows(i).Item("Anwendung").ToString & " " & kundenangebot.Einzelangebot.Rows(i).Item("Element").ToString
    147. g.DrawString(CStr(j), Fettschrift, Brushes.Black, X, Y)
    148. g.DrawString(element, Fettschrift, Brushes.Black, XBeschreibung, Y)
    149. Y += 25
    150. g.DrawString(beschreibung, fntText, Brushes.Black, XBeschreibung, Y)
    151. Y += 25
    152. g.DrawString(länge, fntText, Brushes.Black, xLänge, Y)
    153. Y += 5
    154. g.DrawString(stück, fntText, Brushes.Black, xStück, Y)
    155. g.DrawString(menge, fntText, Brushes.Black, xMenge, Y)
    156. g.DrawString(ep.ToString("C"), fntText, Brushes.Black, xEP - 13, Y)
    157. g.DrawString(gp.ToString("C"), fntText, Brushes.Black, xGP - 13, Y)
    158. Y += 100 'Y-Pos = 640
    159. g.DrawLine(pen1, X, Y, X + 730, Y)
    160. currentrecord += 1
    161. index = i + 1
    162. Y = Y + 10
    163. If (kundenangebot.Einzelangebot.Rows.Count > 3 And currentrecord = 3) Then
    164. g.DrawString(String.Format(" - Seite {0} -", pagenb + 1), fntText, Brushes.Black, 380, 1120)
    165. e.HasMorePages = True
    166. pagenb += 1
    167. Y = 60
    168. Exit Sub
    169. End If
    170. Next
    171. If kundenangebot.Einzelangebot.Rows.Count <= 3 Then
    172. Dim xPos2 As Integer = leftMargin + 600
    173. Dim i2 As Integer
    174. Dim netto2 As Decimal
    175. Dim mwst2 As Decimal
    176. Dim brutto2 As Decimal
    177. For i2 = 0 To EinzelangebotBindingSource.Count
    178. netto2 += CDec(DataGridView1.Rows(i2).Cells.Item(14).Value)
    179. Next
    180. mwst2 = CDec(netto2 * 0.19)
    181. brutto2 = netto2 + mwst2
    182. lblgesamtnetto.Text = Format(netto2, "C")
    183. lblgesamtmwst.Text = Format(mwst2, "C")
    184. lblgesamtbrutto.Text = Format(brutto2, "C")
    185. g.DrawString("Netto", Angebotstitelschrift, Brushes.Black, xPos2, Y)
    186. g.DrawString(lblgesamtnetto.Text, Angebotstitelschrift, Brushes.Black, xPos2 + 70, Y)
    187. Y += 20
    188. g.DrawString("MwSt", Angebotstitelschrift, Brushes.Black, xPos2, Y)
    189. g.DrawString(lblgesamtmwst.Text, Angebotstitelschrift, Brushes.Black, xPos2 + 70, Y)
    190. Y += 20
    191. g.DrawString("Brutto", Angebotstitelschrift, Brushes.Black, xPos2, Y)
    192. g.DrawString(lblgesamtbrutto.Text, Angebotstitelschrift, Brushes.Black, xPos2 + 70, Y)
    193. g.DrawString(String.Format(" - Seite {0} -", pagenb + 1), fntText, Brushes.Black, 380, 1120)
    194. e.HasMorePages = True
    195. pagenb += 1
    196. Y = 60
    197. Exit Sub
    198. ElseIf kundenangebot.Einzelangebot.Rows.Count > 3 Then
    199. If currentrecord = 4 Then
    200. g.DrawString(String.Format(" - Seite {0} -", pagenb + 1), fntText, Brushes.Black, 380, 1120)
    201. e.HasMorePages = True
    202. pagenb += 1
    203. Y = 60
    204. Exit Sub
    205. End If
    206. Else
    207. e.HasMorePages = False
    208. End If
    209. End If
    210. If pagenb = 1 Then
    211. If kundenangebot.Einzelangebot.Rows.Count <= 3 Then
    212. g.DrawString(RichTextBox1.Text, fntText, Brushes.Black, X + 10, Y)
    213. g.DrawString(String.Format(" - Seite {0} -", pagenb + 1), fntText, Brushes.Black, 380, 1120)
    214. End If
    215. If kundenangebot.Einzelangebot.Rows.Count >= 4 Then
    216. Y += 25
    217. Dim mybrush As SolidBrush = New SolidBrush(Color.LightGray)
    218. g.FillRectangle(mybrush, X + 20, Y, X + 710, 25) 'Y-Pos = 460 am unteren Ende des Rechtecks
    219. 'Tabellenkopfzeilen
    220. X = X + 30
    221. Y = Y + 5 'Y-Pos = 430
    222. Dim xPos As Integer = X + 5
    223. Dim XBeschreibung As Integer = xPos + 35
    224. Dim xLänge As Integer = XBeschreibung + 320
    225. Dim xStück As Integer = xLänge + 80
    226. Dim xMenge As Integer = xStück + 80
    227. Dim xEP As Integer = xMenge + 80
    228. Dim xGP As Integer = xEP + 70
    229. g.DrawString("Pos.", Angebotstitelschrift, Brushes.Black, X, Y)
    230. g.DrawString("Beschreibung", Angebotstitelschrift, Brushes.Black, XBeschreibung, Y)
    231. g.DrawString("Länge", Angebotstitelschrift, Brushes.Black, xLänge, Y)
    232. g.DrawString("Stück", Angebotstitelschrift, Brushes.Black, xStück, Y)
    233. g.DrawString("Menge", Angebotstitelschrift, Brushes.Black, xMenge, Y)
    234. g.DrawString("EP (€)", Angebotstitelschrift, Brushes.Black, xEP, Y)
    235. g.DrawString("GP (€)", Angebotstitelschrift, Brushes.Black, xGP, Y)
    236. Dim pos As String
    237. Dim element As String
    238. Dim beschreibung As String
    239. Dim dicke As String
    240. Dim länge As String
    241. Dim stück As String
    242. Dim menge As String
    243. Dim ep As Decimal
    244. Dim gp As Decimal
    245. Dim mwst As Decimal
    246. Dim netto As Decimal
    247. Dim brutto As Decimal
    248. Dim pen1 As New Pen(Brushes.Black, 0.5)
    249. Dim i As Integer = 0
    250. Y = Y + 25 'Y-Pos = 485
    251. For i = index To kundenangebot.Einzelangebot.Rows.Count - 1
    252. netto = CDec(kundenangebot.Einzelangebot.Rows(i).Item("Netto").ToString)
    253. mwst = CDec(kundenangebot.Einzelangebot.Rows(i).Item("MwSt").ToString)
    254. brutto = CDec(kundenangebot.Einzelangebot.Rows(i).Item("Brutto").ToString)
    255. element = kundenangebot.Einzelangebot.Rows(i).Item("Element").ToString
    256. dicke = kundenangebot.Einzelangebot.Rows(i).Item("Kerndicke").ToString
    257. brutto = netto + mwst
    258. pos = kundenangebot.Einzelangebot.Rows(i).Item("Pos").ToString
    259. länge = kundenangebot.Einzelangebot.Rows(i).Item("Länge").ToString
    260. stück = kundenangebot.Einzelangebot.Rows(i).Item("Stück").ToString
    261. menge = kundenangebot.Einzelangebot.Rows(i).Item("Menge").ToString
    262. ep = CDec(kundenangebot.Einzelangebot.Rows(i).Item("Preis (inkl. Fracht)").ToString)
    263. gp = CDec(kundenangebot.Einzelangebot.Rows(i).Item("Netto").ToString)
    264. element = kundenangebot.Einzelangebot.Rows(i).Item("Anwendung").ToString & " " & kundenangebot.Einzelangebot.Rows(i).Item("Element").ToString
    265. Dim j As Integer
    266. j = 10 + (currentrecord * 10)
    267. beschreibung = "Kerndicke" & vbTab & vbTab & kundenangebot.Einzelangebot.Rows(i).Item("Kerndicke").ToString _
    268. & vbCrLf _
    269. & "Dämmkern" & vbTab & vbTab & kundenangebot.Einzelangebot.Rows(i).Item("Dämmkern").ToString & vbCrLf _
    270. & "U-Wert" & vbTab & vbTab & vbTab & kundenangebot.Einzelangebot.Rows(i).Item("U-Wert").ToString & " W/m²K" & vbCrLf _
    271. & "Stahldicke (A/I)" & vbTab & vbTab & kundenangebot.Einzelangebot.Rows(i).Item("Stahldicke (A/I)").ToString & vbCrLf _
    272. & "Profilierung (A/I)" & vbTab & vbTab & kundenangebot.Einzelangebot.Rows(i).Item("Profilierung (A/I)").ToString & vbCrLf _
    273. & "Beschichtung (A/I)" & vbTab & vbTab & kundenangebot.Einzelangebot.Rows(i).Item("Beschichtung (A/I)").ToString & vbCrLf _
    274. & "Farbton (A/I)" & vbTab & vbTab & kundenangebot.Einzelangebot.Rows(i).Item("Farbton (A/I)").ToString
    275. element = kundenangebot.Einzelangebot.Rows(i).Item("Anwendung").ToString & " " & kundenangebot.Einzelangebot.Rows(i).Item("Element").ToString
    276. g.DrawString(CStr(j), Fettschrift, Brushes.Black, X, Y)
    277. g.DrawString(element, Fettschrift, Brushes.Black, XBeschreibung, Y)
    278. Y += 25
    279. g.DrawString(beschreibung, fntText, Brushes.Black, XBeschreibung, Y)
    280. Y += 25
    281. g.DrawString(länge, fntText, Brushes.Black, xLänge, Y)
    282. Y += 5
    283. g.DrawString(stück, fntText, Brushes.Black, xStück, Y)
    284. g.DrawString(menge, fntText, Brushes.Black, xMenge, Y)
    285. g.DrawString(ep.ToString("C"), fntText, Brushes.Black, xEP - 13, Y)
    286. g.DrawString(gp.ToString("C"), fntText, Brushes.Black, xGP - 13, Y)
    287. Y += 100 'Y-Pos = 640
    288. g.DrawLine(pen1, X, Y, X + 730, Y)
    289. currentrecord += 1
    290. index = i + 1
    291. Y = Y + 10
    292. If Y >= 800 Then
    293. g.DrawString(String.Format(" - Seite {0} -", pagenb + 1), fntText, Brushes.Black, 380, 1120)
    294. e.HasMorePages = True
    295. pagenb += 1
    296. Y = 60
    297. Exit Sub
    298. End If
    299. Next
    300. Dim xPos2 As Integer = leftMargin + 600
    301. Dim i2 As Integer
    302. Dim netto2 As Decimal
    303. Dim mwst2 As Decimal
    304. Dim brutto2 As Decimal
    305. For i2 = 0 To EinzelangebotBindingSource.Count
    306. netto2 += CDec(DataGridView1.Rows(i2).Cells.Item(14).Value)
    307. Next
    308. mwst2 = CDec(netto2 * 0.19)
    309. brutto2 = netto2 + mwst2
    310. lblgesamtnetto.Text = Format(netto2, "C")
    311. lblgesamtmwst.Text = Format(mwst2, "C")
    312. lblgesamtbrutto.Text = Format(brutto2, "C")
    313. g.DrawString("Netto", Angebotstitelschrift, Brushes.Black, xPos2, Y)
    314. g.DrawString(lblgesamtnetto.Text, Angebotstitelschrift, Brushes.Black, xPos2 + 70, Y)
    315. Y += 20
    316. g.DrawString("MwSt", Angebotstitelschrift, Brushes.Black, xPos2, Y)
    317. g.DrawString(lblgesamtmwst.Text, Angebotstitelschrift, Brushes.Black, xPos2 + 70, Y)
    318. Y += 20
    319. g.DrawString("Brutto", Angebotstitelschrift, Brushes.Black, xPos2, Y)
    320. g.DrawString(lblgesamtbrutto.Text, Angebotstitelschrift, Brushes.Black, xPos2 + 70, Y)
    321. g.DrawString(RichTextBox1.Text, fntText, Brushes.Black, X + 10, Y)
    322. g.DrawString(String.Format(" - Seite {0} -", pagenb + 1), fntText, Brushes.Black, 380, 1120)
    323. e.HasMorePages = False
    324. Exit Sub
    325. End If
    326. End If
    327. If pagenb > 1 Then
    328. X = 60
    329. Y = 60
    330. Dim mybrush As SolidBrush = New SolidBrush(Color.LightGray)
    331. g.FillRectangle(mybrush, 50, 55, 740, 25) 'Y-Pos = 460 am unteren Ende des Rechtecks
    332. 'Tabellenkopfzeilen
    333. Dim xPos As Integer = X + 5
    334. Dim XBeschreibung As Integer = xPos + 35
    335. Dim xLänge As Integer = XBeschreibung + 320
    336. Dim xStück As Integer = xLänge + 80
    337. Dim xMenge As Integer = xStück + 80
    338. Dim xEP As Integer = xMenge + 80
    339. Dim xGP As Integer = xEP + 70
    340. g.DrawString("Pos.", Angebotstitelschrift, Brushes.Black, X, Y)
    341. g.DrawString("Beschreibung", Angebotstitelschrift, Brushes.Black, XBeschreibung, Y)
    342. g.DrawString("Länge", Angebotstitelschrift, Brushes.Black, xLänge, Y)
    343. g.DrawString("Stück", Angebotstitelschrift, Brushes.Black, xStück, Y)
    344. g.DrawString("Menge", Angebotstitelschrift, Brushes.Black, xMenge, Y)
    345. g.DrawString("EP (€)", Angebotstitelschrift, Brushes.Black, xEP, Y)
    346. g.DrawString("GP (€)", Angebotstitelschrift, Brushes.Black, xGP, Y)
    347. For i = index To kundenangebot.Einzelangebot.Rows.Count - 1
    348. Dim pos As String
    349. Dim element As String
    350. Dim beschreibung As String
    351. Dim dicke As String
    352. Dim länge As String
    353. Dim stück As String
    354. Dim menge As String
    355. Dim ep As Decimal
    356. Dim gp As Decimal
    357. Dim mwst As Decimal
    358. Dim netto As Decimal
    359. Dim brutto As Decimal
    360. Dim pen1 As New Pen(Brushes.Black, 0.5)
    361. Dim i1 As Integer = 0
    362. Y = Y + 25 'Y-Pos = 485
    363. netto = CDec(kundenangebot.Einzelangebot.Rows(i).Item("Netto").ToString)
    364. mwst = CDec(kundenangebot.Einzelangebot.Rows(i).Item("MwSt").ToString)
    365. brutto = CDec(kundenangebot.Einzelangebot.Rows(i).Item("Brutto").ToString)
    366. element = kundenangebot.Einzelangebot.Rows(i).Item("Element").ToString
    367. dicke = kundenangebot.Einzelangebot.Rows(i).Item("Kerndicke").ToString
    368. brutto = netto + mwst
    369. pos = kundenangebot.Einzelangebot.Rows(i).Item("Pos").ToString
    370. länge = kundenangebot.Einzelangebot.Rows(i).Item("Länge").ToString
    371. stück = kundenangebot.Einzelangebot.Rows(i).Item("Stück").ToString
    372. menge = kundenangebot.Einzelangebot.Rows(i).Item("Menge").ToString
    373. ep = CDec(kundenangebot.Einzelangebot.Rows(i).Item("Preis (inkl. Fracht)").ToString)
    374. gp = CDec(kundenangebot.Einzelangebot.Rows(i).Item("Netto").ToString)
    375. element = kundenangebot.Einzelangebot.Rows(i).Item("Anwendung").ToString & " " & kundenangebot.Einzelangebot.Rows(i).Item("Element").ToString
    376. Dim j As Integer
    377. j = 10 + (currentrecord * 10)
    378. beschreibung = "Kerndicke" & vbTab & vbTab & kundenangebot.Einzelangebot.Rows(i).Item("Kerndicke").ToString _
    379. & vbCrLf _
    380. & "Dämmkern" & vbTab & vbTab & kundenangebot.Einzelangebot.Rows(i).Item("Dämmkern").ToString & vbCrLf _
    381. & "U-Wert" & vbTab & vbTab & vbTab & kundenangebot.Einzelangebot.Rows(i).Item("U-Wert").ToString & " W/m²K" & vbCrLf _
    382. & "Stahldicke (A/I)" & vbTab & vbTab & kundenangebot.Einzelangebot.Rows(i).Item("Stahldicke (A/I)").ToString & vbCrLf _
    383. & "Profilierung (A/I)" & vbTab & vbTab & kundenangebot.Einzelangebot.Rows(i).Item("Profilierung (A/I)").ToString & vbCrLf _
    384. & "Beschichtung (A/I)" & vbTab & vbTab & kundenangebot.Einzelangebot.Rows(i).Item("Beschichtung (A/I)").ToString & vbCrLf _
    385. & "Farbton (A/I)" & vbTab & vbTab & kundenangebot.Einzelangebot.Rows(i).Item("Farbton (A/I)").ToString
    386. element = kundenangebot.Einzelangebot.Rows(i).Item("Anwendung").ToString & " " & kundenangebot.Einzelangebot.Rows(i).Item("Element").ToString
    387. g.DrawString(CStr(j), Fettschrift, Brushes.Black, X, Y)
    388. g.DrawString(element, Fettschrift, Brushes.Black, XBeschreibung, Y)
    389. Y += 25
    390. g.DrawString(beschreibung, fntText, Brushes.Black, XBeschreibung, Y)
    391. Y += 25
    392. g.DrawString(länge, fntText, Brushes.Black, xLänge, Y)
    393. Y += 5
    394. g.DrawString(stück, fntText, Brushes.Black, xStück, Y)
    395. g.DrawString(menge, fntText, Brushes.Black, xMenge, Y)
    396. g.DrawString(ep.ToString("C"), fntText, Brushes.Black, xEP - 13, Y)
    397. g.DrawString(gp.ToString("C"), fntText, Brushes.Black, xGP - 13, Y)
    398. Y += 100 'Y-Pos = 640
    399. g.DrawLine(pen1, X, Y, X + 730, Y)
    400. currentrecord += 1
    401. index = i + 1
    402. Y = Y + 10
    403. If Y >= 650 Then
    404. g.DrawString(String.Format(" - Seite {0} -", pagenb + 1), fntText, Brushes.Black, 380, 1120)
    405. e.HasMorePages = True
    406. pagenb += 1
    407. Y = 60
    408. Exit Sub
    409. End If
    410. Next
    411. Dim xPos2 As Integer = leftMargin + 600
    412. Dim i2 As Integer
    413. Dim netto2 As Decimal
    414. Dim mwst2 As Decimal
    415. Dim brutto2 As Decimal
    416. For i2 = 0 To EinzelangebotBindingSource.Count
    417. netto2 += CDec(DataGridView1.Rows(i2).Cells.Item(14).Value)
    418. Next
    419. mwst2 = CDec(netto2 * 0.19)
    420. brutto2 = netto2 + mwst2
    421. lblgesamtnetto.Text = Format(netto2, "C")
    422. lblgesamtmwst.Text = Format(mwst2, "C")
    423. lblgesamtbrutto.Text = Format(brutto2, "C")
    424. g.DrawString("Netto", Angebotstitelschrift, Brushes.Black, xPos2, Y + 30)
    425. g.DrawString(lblgesamtnetto.Text, Angebotstitelschrift, Brushes.Black, xPos2 + 70, Y + 30)
    426. Y += 20
    427. g.DrawString("MwSt", Angebotstitelschrift, Brushes.Black, xPos2, Y + 30)
    428. g.DrawString(lblgesamtmwst.Text, Angebotstitelschrift, Brushes.Black, xPos2 + 70, Y + 30)
    429. Y += 20
    430. g.DrawString("Brutto", Angebotstitelschrift, Brushes.Black, xPos2, Y + 30)
    431. g.DrawString(lblgesamtbrutto.Text, Angebotstitelschrift, Brushes.Black, xPos2 + 70, Y + 30)
    432. g.DrawString(RichTextBox1.Text, fntText, Brushes.Black, X + 10, Y + 50)
    433. g.DrawString(String.Format(" - Seite {0} -", pagenb + 1), fntText, Brushes.Black, 380, 1120)
    434. e.HasMorePages = False
    435. Exit Sub
    436. End If
    437. End Sub