DataGridView quer ausdrucken

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

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von Amelie.

    DataGridView quer ausdrucken

    Hallo und HILFEEEEEEE

    Ich versuche nun schon seit Stunden den Fehler zu finden.
    Ich möchte das DGV im Querformat ausdrucken. Es sollte immer auf ein DIN A4 Blatt passen, da ja nur immer 28 - 31 Zeilen entstehen.
    Hier der letzte Code den ich habe. Anbei ein Bild vom Ausdruck ;;-(


    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private WithEvents PrintDocument1 As New Printing.PrintDocument()
    2. Private Sub PrintDocument1_BeginPrint(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintEventArgs) Handles PrintDocument1.BeginPrint
    3. Dim ps As New Printing.PaperSize("Custom", 583, 827)
    4. ps.RawKind = Printing.PaperKind.A4Rotated ' Legt das Querformat fest
    5. PrintDocument1.DefaultPageSettings.PaperSize = ps ' Setzt die Druckereinstellungen auf Querformat
    6. End Sub
    7. Private Sub frm_Main_Load(sender As Object, e As EventArgs) Handles Me.Load
    8. PrintDocument1.DefaultPageSettings.Landscape = True
    9. PrintDocument1.DefaultPageSettings.PaperSize = New PaperSize("A4Querformat", 827, 583)
    10. AddHandler PrintDocument1.BeginPrint, AddressOf PrintDocument1_BeginPrint
    11. '....
    12. End Sub
    13. Private Sub PrintDocument1_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
    14. Dim pageSettings As PageSettings = PrintDocument1.DefaultPageSettings
    15. Dim printArea As RectangleF = pageSettings.PrintableArea
    16. PrintDocument1.DefaultPageSettings.Landscape = True
    17. PrintDocument1.DefaultPageSettings.PaperSize = New PaperSize("A4", 827, 583)
    18. Dim printWidth As Integer = PrintDocument1.DefaultPageSettings.PaperSize.Width - PrintDocument1.DefaultPageSettings.Margins.Left - PrintDocument1.DefaultPageSettings.Margins.Right
    19. Dim printHeight As Integer = PrintDocument1.DefaultPageSettings.PaperSize.Height - PrintDocument1.DefaultPageSettings.Margins.Top - PrintDocument1.DefaultPageSettings.Margins.Bottom
    20. Dim leftMargin As Single = pageSettings.Margins.Left
    21. Dim rightMargin As Single = pageSettings.Margins.Right
    22. Dim topMargin As Single = pageSettings.Margins.Top
    23. Dim bottomMargin As Single = pageSettings.Margins.Bottom
    24. Dim numRows As Integer = DGV_1.RowCount
    25. Dim numCols As Integer = DGV_1.ColumnCount
    26. Dim cellFont As Font = DGV_1.DefaultCellStyle.Font
    27. Dim headerFont As Font = New Font(cellFont.FontFamily, cellFont.Size, FontStyle.Bold)
    28. Dim rowHeight As Single = DGV_1.RowTemplate.Height
    29. Dim headerHeight As Single = rowHeight * 2
    30. Dim cellPadding As Single = 5
    31. Dim currentRow As Integer = 0
    32. Dim currentCol As Integer = 0
    33. Dim cellBounds As RectangleF
    34. Dim rowBounds As RectangleF
    35. While currentRow < numRows
    36. rowBounds = New RectangleF(leftMargin, topMargin + (currentRow * rowHeight), printWidth, rowHeight)
    37. cellBounds = New RectangleF(leftMargin + cellPadding, topMargin + (currentRow * rowHeight) + cellPadding, rowHeight - (cellPadding * 2), rowHeight - (cellPadding * 2))
    38. If currentRow Mod 2 = 0 Then
    39. e.Graphics.FillRectangle(Brushes.White, rowBounds)
    40. Else
    41. e.Graphics.FillRectangle(Brushes.LightGray, rowBounds)
    42. End If
    43. For currentCol = 0 To numCols - 1
    44. Dim headerBounds As RectangleF = New RectangleF(leftMargin + (currentCol * cellBounds.Height), topMargin + (currentRow * rowHeight), cellBounds.Height, headerHeight)
    45. Dim cellValue As String = DGV_1.Columns(currentCol).HeaderText
    46. e.Graphics.FillRectangle(Brushes.LightGray, headerBounds)
    47. e.Graphics.DrawString(cellValue, headerFont, Brushes.Black, headerBounds)
    48. cellValue = DGV_1.Rows(currentRow).Cells(currentCol).FormattedValue.ToString()
    49. cellBounds = New RectangleF(leftMargin + (currentCol * cellBounds.Height) + cellPadding, topMargin + (currentRow * rowHeight) + cellPadding, rowHeight - (cellPadding * 2), cellBounds.Height - (cellPadding * 2))
    50. e.Graphics.DrawString(cellValue, cellFont, Brushes.Black, cellBounds)
    51. Next
    52. currentRow += 1
    53. If currentRow * rowHeight + topMargin + bottomMargin > printHeight Then
    54. 'e.HasMorePages = True
    55. Return
    56. End If
    57. End While
    58. e.HasMorePages = False
    59. End Sub

    Bilder
    • ausdruck-1.jpg

      133,34 kB, 1.121×655, 51 mal angesehen
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:
    @Amelie Hast Du Dir mal den Tabellendruck hier angesehen und verstanden?
    Drucken mehrseitiger Dokumente
    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!
    AddHandler PrintDocument1.BeginPrint, AddressOf PrintDocument1_BeginPrint plus Handles PrintDocument1.BeginPrint ist doppelt gemoppelt. Weg mit dem ersten.
    e.HasMorePages ist von Haus aus False, Du brauchst es in Zeile#66 nicht explizit zu setzen.

    Auch hier frag ich mich: Unmengen an Code. Wie konnte es soweit kommen, dass hier gar nichts mehr vernünftig gedruckt wird? Das hätte doch schon viel früher auffallen müssen.
    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.
    Das was ich verstanden habe und was ich sonst so im www gefunden habe, versuchte ich ja umzusetzen.
    Es fällt mir halt nicht so leicht wie Euch. ;(

    Eben las ich nochmal etwas über eine "DGV_Print Klasse" die ich downloaden solle... hmmm????
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:

    Amelie schrieb:

    die ich downloaden solle
    von welcher Quelle?
    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!
    @Amelie

    RodFromGermany schrieb:

    Hast Du Dir mal den Tabellendruck hier angesehen und verstanden?
    Drucken mehrseitiger Dokumente
    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!
    Aso mit einigen Änderungen habe ich es nun hinbekommen.
    Siehe Bildangabe
    Das Eingeben und Ändern der Daten im DGV klappt, ebenso das speichern in der XML-Datei.
    Das Umschalten der Monate etc klappt auch.
    Nun geht es an die Diagramme ...
    Bilder
    • ausdruck-1.jpg

      529,99 kB, 1.271×937, 40 mal angesehen
    • wetterapp-1.jpg

      200,45 kB, 700×349, 40 mal angesehen
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh: