Datagridview drucken: Kopfzeile bzw 1. Zeile werden nicht gedruckt

  • VB.NET

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    Datagridview drucken: Kopfzeile bzw 1. Zeile werden nicht gedruckt

    Guten Tag, trotz miesem Wetter!
    Ich möchte gerne meine Daten aus einem Datagridview ausdrucken mit folgendem Code, der natürlich nicht von mir ist (Ich verstehe ihn auch noch nicht vollständig). Die Tabelle wird auch mehrseitig wie gewünscht gedruckt, nur es besteht folgendes Problem beim Drucken der ersten Seite:
    Beim ersten Drucken nach dem Programmstart wird die 1. Zeile ausgelassen, die Kopfzeile aber gedruckt. Bei allen nachfolgenden Druckversuchen wird die Kopfzeile nicht gedruckt, aber alle Zeilen von 1 bis Ende. Bemerken möchte ich noch, dass bei den Folgeseiten die Kopfzeile immer gedruckt wird und auch keine Zeile ausgelassen wird.

    VB.NET-Quellcode

    1. Dim mRow1 As Integer = 0
    2. Dim newpage1 As Boolean = True
    3. Private Sub BoxTabelleToolStripMenuItem_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles BoxTabelleToolStripMenuItem.Click
    4. PrintDialog1.AllowSelection = True
    5. PrintDialog1.AllowSomePages = True
    6. PrintDialog1.AllowCurrentPage = True
    7. PrintDialog1.PrinterSettings = PageSetupDialog1.PrinterSettings
    8. PrintPreviewDialog1.WindowState = FormWindowState.Maximized
    9. PrintDialog1.ShowDialog()
    10. PrintPreviewDialog1.Document = PrintDocument1
    11. PrintPreviewDialog1.ShowDialog()
    12. End Sub
    13. Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
    14. With TblBoxdgv
    15. Dim fmt As StringFormat = New StringFormat(StringFormatFlags.LineLimit)
    16. fmt.LineAlignment = StringAlignment.Center
    17. fmt.Trimming = StringTrimming.EllipsisCharacter
    18. Dim y As Single = e.MarginBounds.Top
    19. Do While mRow1 < .RowCount
    20. Dim row As DataGridViewRow = .Rows(mRow1)
    21. Dim x As Single = e.MarginBounds.Left
    22. Dim h As Single = 0
    23. For Each cell As DataGridViewCell In row.Cells
    24. Dim rc As RectangleF = New RectangleF(x, y, cell.Size.Width, cell.Size.Height)
    25. : e.Graphics.DrawRectangle(Pens.Black, rc.Left, rc.Top, rc.Width, rc.Height)
    26. If (newpage1) Then
    27. e.Graphics.DrawString(TblBoxdgv.Columns(cell.ColumnIndex).HeaderText, .Font, Brushes.Black, rc, fmt)
    28. Else
    29. e.Graphics.DrawString(TblBoxdgv.Rows(cell.RowIndex).Cells(cell.ColumnIndex).FormattedValue.ToString(), .Font, Brushes.Black, rc, fmt)
    30. End If
    31. : x += rc.Width
    32. h = Math.Max(h, rc.Height)
    33. Next
    34. newpage1 = False
    35. y += h
    36. mRow1 += 1
    37. If y + h > e.MarginBounds.Bottom Then
    38. e.HasMorePages = True
    39. mRow1 -= 1
    40. newpage1 = True
    41. Exit Sub
    42. End If
    43. Loop
    44. mRow1 = 0
    45. End With
    46. End Sub


    Ich hoffe, ich habe mein Problem verständlich beschreiben können. Wer kann mir weiterhelfen?
    Vielen Dank einstweilen.
    el
    @VB-and-Me: Setz einen Haltepunkt in dioe Prozedur und überzeuge Dich schrittweise vom richtigen Abarbeiten des Codes.
    Überwach die Variablen im Debugger, und wenn sich etwas nicht so verhält wie Du meinst, hast Du einen Fehler gefunden.
    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!
    Hallo!
    Vielen Dank für die Anregung! Ich habe dadurch den Fehler gefunden: bei der ersten Kopfzeile wurde automatisch auch die aktuelle ZeilenNummer um 1 erhöht, so dass die Zeile 1 beim Drucken ausgelassen wurde.
    Ich habe die Zeilen 36 und 38 ersetzt durch:

    VB.NET-Quellcode

    1. If newpage1 AndAlso mRow1 = 0 Then
    2. mRow1 = 0
    3. Else
    4. mRow1 += 1
    5. End If
    6. newpage1 = False


    Außerdem müssen in der Sub BoxTabelle... noch die Zeilen

    VB.NET-Quellcode

    1. mRow1 = 0
    2. newpage1 = True

    eingefügt werden, damit die Variablen bei jedem Sub-Aufruf wieder ihre Anfangswerte haben.

    Vielen Dank!
    Freundliche Grüße
    el

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VB-and-Me“ ()

    VB-and-Me schrieb:

    Vielen Dank für die Anregung!
    Das ist keine Anregung, das ist eine Handlungsanweisung, die Du (eigentlich) für jede Deiner Codezeilen durchführen solltest.
    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!