GridView drucken

  • VB.NET

Es gibt 18 Antworten in diesem Thema. Der letzte Beitrag () ist von menorca.

    GridView drucken

    Hi das ist mir viel wichtiger, Gridview mit "Image Spalte" drucken

    habe den Code nach 2600 Seiten erstellen abgebrochen, und verstehe nicht warum er >2600 Seiten erstellt :?:

    Spoiler anzeigen

    Quellcode

    1. Private Sub Export_Button_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles export_Button.Click
    2. Dim PrintDlg As PrintDialog = New PrintDialog()
    3. Dim PrintDlgRslt As DialogResult = New DialogResult()
    4. Dim MyDoc As PrintDocument = New PrintDocument()
    5. '
    6. PrintPreviewDialog1.PrintPreviewControl.Zoom = 1
    7. PrintPreviewDialog1.Document = PrintDocument1
    8. PrintPreviewDialog1.Show()
    9. End Sub
    10. ':::
    11. Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
    12. Dim oStringFormat As StringFormat
    13. Dim TotalWidth As Integer
    14. Dim nRowPos As Integer = 0
    15. Dim NewPage As Boolean = True
    16. Dim PageNo As Integer = 1
    17. Dim Header As String = "Consolidated Report"
    18. 'Dim sUserName As String = WHOLOGGEDIN
    19. Dim oColumnLefts As New ArrayList
    20. Dim oColumnWidths As New ArrayList
    21. Dim oColumnTypes As New ArrayList
    22. Dim Height As Integer
    23. Dim Width As Integer
    24. Dim i As Integer
    25. Dim RowsPerPage As Integer
    26. Dim Top As Integer = e.MarginBounds.Top
    27. Dim Left As Integer = e.MarginBounds.Left
    28. TotalWidth = 0
    29. For Each DColumn As DataGridViewColumn In DataGridView1.Columns
    30. TotalWidth += DColumn.Width
    31. Next
    32. If PageNo = 1 Then
    33. For Each DColumn As DataGridViewColumn In DataGridView1.Columns
    34. Width = CType(Math.Floor(DColumn.Width / TotalWidth * TotalWidth * (e.MarginBounds.Width / TotalWidth)), Int16)
    35. Height = e.Graphics.MeasureString(DColumn.HeaderText, DColumn.InheritedStyle.Font, Width).Height + 15
    36. oColumnLefts.Add(Left)
    37. oColumnWidths.Add(Width)
    38. oColumnTypes.Add(DColumn.GetType)
    39. Left += Width
    40. Next
    41. End If
    42. Do While nRowPos < DataGridView1.Rows.Count
    43. Dim oRow As DataGridViewRow = DataGridView1.Rows(nRowPos)
    44. If Top + Height >= e.MarginBounds.Height + e.MarginBounds.Top Then
    45. 'DrawFooter(e, RowsPerPage)
    46. NewPage = True
    47. PageNo += 1
    48. e.HasMorePages = True
    49. Exit Sub
    50. Else
    51. If NewPage Then
    52. Top = e.MarginBounds.Top
    53. i = 0
    54. For Each oColumn As DataGridViewColumn In DataGridView1.Columns
    55. e.Graphics.FillRectangle(New SolidBrush(Drawing.Color.LightGray), New Rectangle(oColumnLefts(i), Top, oColumnWidths(i), Height))
    56. e.Graphics.DrawRectangle(Pens.Black, New Rectangle(oColumnLefts(i), Top, oColumnWidths(i), Height))
    57. e.Graphics.DrawString(oColumn.HeaderText, oColumn.InheritedStyle.Font, New SolidBrush(oColumn.InheritedStyle.ForeColor), New RectangleF(oColumnLefts(i), Top, oColumnWidths(i), Height), oStringFormat)
    58. i += 1
    59. Next
    60. NewPage = False
    61. End If
    62. Top += Height
    63. i = 0
    64. For Each oCell As DataGridViewCell In oRow.Cells
    65. If oColumnTypes(i) Is GetType(DataGridViewTextBoxColumn) Then
    66. e.Graphics.DrawString(oCell.Value.ToString, oCell.InheritedStyle.Font, New SolidBrush(oCell.InheritedStyle.ForeColor), New RectangleF(oColumnLefts(i), Top, oColumnWidths(i), Height), oStringFormat)
    67. ElseIf oColumnTypes(i) Is GetType(DataGridViewImageColumn) Then
    68. Dim oCellSize As Rectangle = New Rectangle(oColumnLefts(i), Top, oColumnWidths(i), Height)
    69. Dim oImageSize As Size = CType(oCell.Value, Image).Size
    70. e.Graphics.DrawImage(oCell.Value, New Rectangle(oColumnLefts(i) + CType(((oCellSize.Width - oImageSize.Width) / 2), Int32), Top + CType(((oCellSize.Height - oImageSize.Height) / 2), Int32), CType(oCell.Value, Image).Width, CType(oCell.Value, Image).Height))
    71. End If
    72. e.Graphics.DrawRectangle(Pens.Black, New Rectangle(oColumnLefts(i), Top, oColumnWidths(i), Height))
    73. i += 1
    74. Next
    75. End If
    76. nRowPos += 1
    77. RowsPerPage += 1
    78. Loop
    79. 'Footer(e, RowsPerPage)
    80. e.HasMorePages = False
    81. End Sub
    Bilder
    • Lagerliste_drucken.PNG

      94,72 kB, 1.258×496, 221 mal angesehen
    @menorca: Beherrschst Du das Drucken eines mehrseitigen normalen Textes?
    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!

    menorca schrieb:

    Ja, habe einen Code
    Ich wollte nicht wissen, ob Du Dir Deine Hosen mit einem Kran anziehst, ich wollte wissen, ob Du das Drucken mehrerer Seiten Texts beherrschst.
    "Ich habe einen Code" und "Ich bin selbst in der Lage, selbst solch Code praktisch fehlerfrei zu entwickeln" ist doch ein größerer Unterschied.
    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!
    Dann solltest Du damit anfangen, un ein Gefühl für die Druckerausgabe per .NET zu bekommen.
    Gib mal oben rechts Drucken als Suchbegriff ein. Wenn das zu viel ist, ändere die Suche und gib meinen Namen als Autor ein.
    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!
    Danke Rod,

    bei der Suche drucken, gab es 5 Beiträge (unsere)
    bei deinen Namen gab es 34 Seiten, welche davon soll passen.

    warum untersuchen wir nicht den Code, warum es mit der Seitenanzahl nicht richtig funzt
    das ist doch annährend was ich brauche. Hilf mir doch einmal richtig ohne Verweis auf Links etc.
    Danke, Danke

    Quellcode

    1. ':::
    2. Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles MyPrintDocument.PrintPage, PrintDocument1.PrintPage
    3. Dim oStringFormat As StringFormat
    4. Dim TotalWidth As Integer
    5. Dim nRowPos As Integer = 0
    6. Dim NewPage As Boolean = True
    7. Dim DrawFooter As Boolean = True
    8. Dim PageNo As Integer = 1
    9. Dim Header As String = "Consolidated Report"
    10. 'Dim sUserName As String = WHOLOGGEDIN
    11. Dim oColumnLefts As New ArrayList
    12. Dim oColumnWidths As New ArrayList
    13. Dim oColumnTypes As New ArrayList
    14. Dim Height As Integer
    15. Dim Width As Integer
    16. Dim i As Integer
    17. Dim RowsPerPage As Integer
    18. Dim Top As Integer = e.MarginBounds.Top
    19. Dim Left As Integer = e.MarginBounds.Left
    20. TotalWidth = 0
    21. For Each DColumn As DataGridViewColumn In DataGridView1.Columns
    22. TotalWidth += DColumn.Width
    23. Next
    24. If PageNo = 1 Then
    25. For Each DColumn As DataGridViewColumn In DataGridView1.Columns
    26. Width = CType(Math.Floor(DColumn.Width / TotalWidth * TotalWidth * (e.MarginBounds.Width / TotalWidth)), Int16)
    27. Height = e.Graphics.MeasureString(DColumn.HeaderText, DColumn.InheritedStyle.Font, Width).Height + 12
    28. oColumnLefts.Add(Left)
    29. oColumnWidths.Add(Width)
    30. oColumnTypes.Add(DColumn.GetType)
    31. Left += Width
    32. Next
    33. End If
    34. Do While nRowPos < DataGridView1.Rows.Count
    35. Dim oRow As DataGridViewRow = DataGridView1.Rows(nRowPos)
    36. If Top + Height >= e.MarginBounds.Height + e.MarginBounds.Top Then
    37. 'DrawFooter(e, RowsPerPage)
    38. NewPage = True
    39. PageNo += 1
    40. e.HasMorePages = True
    41. Exit Sub
    42. Else
    43. If NewPage Then
    44. Top = e.MarginBounds.Top
    45. i = 0
    46. For Each oColumn As DataGridViewColumn In DataGridView1.Columns
    47. e.Graphics.FillRectangle(New SolidBrush(Drawing.Color.LightGray), New Rectangle(oColumnLefts(i), Top, oColumnWidths(i), Height))
    48. e.Graphics.DrawRectangle(Pens.Black, New Rectangle(oColumnLefts(i), Top, oColumnWidths(i), Height))
    49. e.Graphics.DrawString(oColumn.HeaderText, oColumn.InheritedStyle.Font, New SolidBrush(oColumn.InheritedStyle.ForeColor), New RectangleF(oColumnLefts(i), Top, oColumnWidths(i), Height), oStringFormat)
    50. i += 1
    51. Next
    52. NewPage = False
    53. End If
    54. Top += Height
    55. i = 0
    56. For Each oCell As DataGridViewCell In oRow.Cells
    57. If oColumnTypes(i) Is GetType(DataGridViewTextBoxColumn) Then
    58. e.Graphics.DrawString(oCell.Value.ToString, oCell.InheritedStyle.Font, New SolidBrush(oCell.InheritedStyle.ForeColor), New RectangleF(oColumnLefts(i), Top, oColumnWidths(i), Height), oStringFormat)
    59. ElseIf oColumnTypes(i) Is GetType(DataGridViewImageColumn) Then
    60. Dim oCellSize As Rectangle = New Rectangle(oColumnLefts(i), Top, oColumnWidths(i), Height)
    61. Dim oImageSize As Size = CType(oCell.Value, Image).Size
    62. e.Graphics.DrawImage(oCell.Value, New Rectangle(oColumnLefts(i) + CType(((oCellSize.Width - oImageSize.Width) / 3), Int32), Top + CType(((oCellSize.Height - oImageSize.Height) / 3), Int32), CType(oCell.Value, Image).Width, CType(oCell.Value, Image).Height))
    63. End If
    64. e.Graphics.DrawRectangle(Pens.Black, New Rectangle(oColumnLefts(i), Top, oColumnWidths(i), Height))
    65. i += 1
    66. Next
    67. End If
    68. nRowPos += 1
    69. RowsPerPage += 1
    70. Loop
    71. 'Footer(e, RowsPerPage)
    72. e.HasMorePages = True
    73. End Sub
    Bilder
    • Lagerliste_drucken.PNG

      122,53 kB, 1.056×619, 149 mal angesehen

    menorca schrieb:

    warum untersuchen wir nicht den Code, warum es mit der Seitenanzahl nicht richtig funzt
    Weil Du zunächst lernen musst, die Seitenzahl n mal richtig zu drucken.
    Alles zu seiner Zeit.
    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 Rod,

    wie geht es denn nun weiter...
    wie geht es mit der GridView....
    wie bereits erwähnt, eine Spalte ist eine Image Spalte
    Spoiler anzeigen

    Quellcode

    1. Private s As String = String.Empty
    2. ':::::
    3. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    4. For i = 0 To 150
    5. s += "blablablabla " & i.ToString & Environment.NewLine
    6. Next
    7. End Sub
    8. '::::::
    9. Private Sub PrintDocument1_PrintPage(ByVal sender As Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
    10. Dim AnzahlZeichen As Integer
    11. Dim AnzahlZeilen As Integer
    12. Dim strFormat As New StringFormat With {.Trimming = StringTrimming.Word}
    13. Dim Layout As New RectangleF(e.MarginBounds.Left, e.MarginBounds.Top, e.MarginBounds.Width, e.MarginBounds.Bottom)
    14. Dim LayoutArea As New SizeF(Layout.Width, Layout.Height - Me.Font.GetHeight(e.Graphics))
    15. e.Graphics.MeasureString(s, Me.Font, LayoutArea, strFormat, AnzahlZeichen, AnzahlZeilen)
    16. e.Graphics.DrawString(s.Substring(0, AnzahlZeichen), Me.Font, Brushes.Black, Layout, strFormat)
    17. If AnzahlZeichen < s.Length Then
    18. s = s.Substring(AnzahlZeichen)
    19. e.HasMorePages = True
    20. Else
    21. e.HasMorePages = False
    22. End If
    23. End Sub
    24. '::::::
    25. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    26. PrintPreviewDialog1.Document = PrintDocument1
    27. If PrintPreviewDialog1.ShowDialog = DialogResult.OK Then
    28. PrintDocument1.Print()
    29. End If
    30. End Sub

    menorca schrieb:

    wie geht es denn nun weiter...
    Du musst Deine Hausaufgaben machen, nicht ich.
    Benutz die Suchfunktion, da gibt es fertige Lösungen.
    Probiere nun, ein Rechteck (einen Rahmen) zu drucken und darin einen Text, der nur innerhalb des Rechtecks zu sehen sein soll.
    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 Forum.

    wer erklärt mir mal, warum das mit der Seitenanzahl nicht korrekt funktioniert, wo ist der Fehler im Code
    er macht alles wie ich es will, doch beim Seiten generieren nicht. ?(

    Spoiler anzeigen

    Quellcode

    1. Dim oStringFormat As StringFormat
    2. Dim TotalWidth As Integer
    3. Dim nRowPos As Integer = 0
    4. Dim NewPage As Boolean = True
    5. Dim DrawFooter As Boolean = True
    6. Dim PageNo As Integer = 1
    7. Dim Header As String = "Inhalt Lagerschrank"
    8. Dim prFont As New Font("Arial", 22, GraphicsUnit.Point)
    9. Dim oColumnLefts As New ArrayList
    10. Dim oColumnWidths As New ArrayList
    11. Dim oColumnTypes As New ArrayList
    12. Dim Height As Integer
    13. Dim Width As Integer
    14. Dim i As Integer
    15. Dim RowsPerPage As Integer
    16. Dim Top As Integer = e.MarginBounds.Top
    17. Dim Left As Integer = e.MarginBounds.Left
    18. TotalWidth = 0
    19. For Each DColumn As DataGridViewColumn In DataGridView1.Columns
    20. TotalWidth += DColumn.Width
    21. Next
    22. If PageNo = 1 Then
    23. For Each DColumn As DataGridViewColumn In DataGridView1.Columns
    24. Width = CType(Math.Floor(DColumn.Width / TotalWidth * TotalWidth * (e.MarginBounds.Width / TotalWidth)), Int16)
    25. Height = e.Graphics.MeasureString(DColumn.HeaderText, DColumn.InheritedStyle.Font, Width).Height + 30
    26. oColumnLefts.Add(Left)
    27. oColumnWidths.Add(Width)
    28. oColumnTypes.Add(DColumn.GetType)
    29. Left += Width
    30. Next
    31. End If
    32. Do While nRowPos < DataGridView1.Rows.Count
    33. Dim oRow As DataGridViewRow = DataGridView1.Rows(nRowPos)
    34. If Top + Height >= e.MarginBounds.Height + e.MarginBounds.Top Then
    35. 'DrawFooter(e, RowsPerPage)
    36. NewPage = True
    37. PageNo += 1
    38. e.HasMorePages = True
    39. Exit Sub
    40. Else
    41. If NewPage Then
    42. Top = e.MarginBounds.Top
    43. i = 0
    44. For Each oColumn As DataGridViewColumn In DataGridView1.Columns
    45. e.Graphics.DrawString(vbTab & Header, prFont, Brushes.Blue, 0, 40)
    46. e.Graphics.FillRectangle(New SolidBrush(Drawing.Color.LightGray), New Rectangle(oColumnLefts(i), Top, oColumnWidths(i), Height))
    47. e.Graphics.DrawRectangle(Pens.Black, New Rectangle(oColumnLefts(i), Top, oColumnWidths(i), Height))
    48. e.Graphics.DrawString(oColumn.HeaderText, oColumn.InheritedStyle.Font, New SolidBrush(oColumn.InheritedStyle.ForeColor), New RectangleF(oColumnLefts(i), Top, oColumnWidths(i), Height), oStringFormat)
    49. i += 1
    50. Next
    51. NewPage = False
    52. End If
    53. Top += Height
    54. i = 0
    55. For Each oCell As DataGridViewCell In oRow.Cells
    56. If oColumnTypes(i) Is GetType(DataGridViewTextBoxColumn) Then
    57. e.Graphics.DrawString(oCell.Value.ToString, oCell.InheritedStyle.Font, New SolidBrush(oCell.InheritedStyle.ForeColor), New RectangleF(oColumnLefts(i), Top, oColumnWidths(i), Height), oStringFormat)
    58. ElseIf oColumnTypes(i) Is GetType(DataGridViewImageColumn) Then
    59. Dim oCellSize As Rectangle = New Rectangle(oColumnLefts(i), Top, oColumnWidths(i), Height)
    60. Dim oImageSize As Size = CType(oCell.Value, Image).Size
    61. e.Graphics.DrawImage(oCell.Value, New Rectangle(oColumnLefts(i) + CType(((oCellSize.Width - oImageSize.Width) / 3), Int32), Top + CType(((oCellSize.Height - oImageSize.Height) / 3), Int32), CType(oCell.Value, Image).Width, CType(oCell.Value, Image).Height))
    62. End If
    63. e.Graphics.DrawRectangle(Pens.Black, New Rectangle(oColumnLefts(i), Top, oColumnWidths(i), Height))
    64. i += 1
    65. Next
    66. End If
    67. nRowPos += 1
    68. RowsPerPage += 1
    69. Loop
    70. 'Footer(e, RowsPerPage)
    71. e.HasMorePages = True

    menorca schrieb:

    wo ist der Fehler im Code

    VB.NET-Quellcode

    1. Dim PageNo As Integer = 1
    Pack die Zeile aus der Prozedur in die Klasse.
    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!

    menorca schrieb:

    in welche Klasse
    In die Klasse, der die Prozedur angehört, also einfach ca. 3 bis 5 Zeilen höher.
    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!
    Oh Rod,

    habe ich doch richtig verstanden, oder ? nur funktioniert es immer noch nicht
    er will zu viele Seiten aufbauen

    Quellcode

    1. Dim oStringFormat As StringFormat
    2. Dim TotalWidth As Integer
    3. Dim nRowPos As Integer = 0
    4. Dim NewPage As Boolean = True
    5. Dim DrawFooter As Boolean = True
    6. Dim PageNo As Integer = 1
    7. Dim Header As String = "Inhalt Lagerschrank"
    8. Dim prFont As New Font("Arial", 22, GraphicsUnit.Point)
    9. Dim oColumnLefts As New ArrayList
    10. Dim oColumnWidths As New ArrayList
    11. Dim oColumnTypes As New ArrayList
    12. Dim Height As Integer
    13. Dim Width As Integer
    14. Dim i As Integer
    15. Dim RowsPerPage As Integer
    16. Dim Top As Integer = e.MarginBounds.Top
    17. Dim Left As Integer = e.MarginBounds.Left
    18. TotalWidth = 891
    19. If PageNo = 1 Then 'hierher Verschoben
    20. For Each DColumn As DataGridViewColumn In DataGridView1.Columns
    21. Width = CType(Math.Floor(DColumn.Width / TotalWidth * TotalWidth * (e.MarginBounds.Width / TotalWidth)), Int16)
    22. Height = e.Graphics.MeasureString(DColumn.HeaderText, DColumn.InheritedStyle.Font, Width).Height + 30
    23. oColumnLefts.Add(Left)
    24. oColumnWidths.Add(Width)
    25. oColumnTypes.Add(DColumn.GetType)
    26. Left += Width
    27. Next
    28. End If
    29. For Each DColumn As DataGridViewColumn In DataGridView1.Columns
    30. TotalWidth += DColumn.Width
    31. Next
    32. Do While nRowPos < DataGridView1.Rows.Count
    33. Dim oRow As DataGridViewRow = DataGridView1.Rows(nRowPos)
    34. If Top + Height >= e.MarginBounds.Height + e.MarginBounds.Top Then
    35. 'DrawFooter(e, RowsPerPage)
    36. NewPage = True
    37. PageNo += 1
    38. e.HasMorePages = True
    39. Exit Sub
    40. Else
    41. If NewPage Then
    42. Top = e.MarginBounds.Top
    43. i = 0
    44. For Each oColumn As DataGridViewColumn In DataGridView1.Columns
    45. e.Graphics.DrawString(vbTab & Header, prFont, Brushes.Blue, 0, 40)
    46. e.Graphics.FillRectangle(New SolidBrush(Drawing.Color.LightGray), New Rectangle(oColumnLefts(i), Top, oColumnWidths(i), Height))
    47. e.Graphics.DrawRectangle(Pens.Black, New Rectangle(oColumnLefts(i), Top, oColumnWidths(i), Height))
    48. e.Graphics.DrawString(oColumn.HeaderText, oColumn.InheritedStyle.Font, New SolidBrush(oColumn.InheritedStyle.ForeColor), New RectangleF(oColumnLefts(i), Top, oColumnWidths(i), Height), oStringFormat)
    49. i += 1
    50. Next
    51. NewPage = False
    52. End If
    53. Top += Height
    54. i = 0
    55. For Each oCell As DataGridViewCell In oRow.Cells
    56. If oColumnTypes(i) Is GetType(DataGridViewTextBoxColumn) Then
    57. e.Graphics.DrawString(oCell.Value.ToString, oCell.InheritedStyle.Font, New SolidBrush(oCell.InheritedStyle.ForeColor), New RectangleF(oColumnLefts(i), Top, oColumnWidths(i), Height), oStringFormat)
    58. ElseIf oColumnTypes(i) Is GetType(DataGridViewImageColumn) Then
    59. Dim oCellSize As Rectangle = New Rectangle(oColumnLefts(i), Top, oColumnWidths(i), Height)
    60. Dim oImageSize As Size = CType(oCell.Value, Image).Size
    61. e.Graphics.DrawImage(oCell.Value, New Rectangle(oColumnLefts(i) + CType(((oCellSize.Width - oImageSize.Width) / 3), Int32), Top + CType(((oCellSize.Height - oImageSize.Height) / 3), Int32), CType(oCell.Value, Image).Width, CType(oCell.Value, Image).Height))
    62. End If
    63. e.Graphics.DrawRectangle(Pens.Black, New Rectangle(oColumnLefts(i), Top, oColumnWidths(i), Height))
    64. i += 1
    65. Next
    66. End If
    67. nRowPos += 1
    68. RowsPerPage += 1
    69. Loop
    70. 'Footer(e, RowsPerPage)
    71. e.HasMorePages = True
    @menorca: Da machst Du zunächst ein kleines Testprogramm, mit dem Du genau dieses Problem untersuchst:
    Drucke 7 Seiten (PDF natürlich) und auf diesen Seiten nur die Seitennummer.
    Klassenvariablen: aktuelle Seitennummer
    DruckStart: diese = 0
    PrintDoc diese +=1 und HasMorePages entsprechend setzen.
    Feddich.
    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,

    solange "e.HasMorePages = True" am ende der Sub ohne eine Bedingung steht werden solange neue Seiten erstellt wie das Programm läuft bzw. bis der Durck abgebrochen wird. Also wenn alle Seiten erstellt sind muss "e.HasMorePages = False" gesetzt sein. Desweiteren würde ich empfehlen endlich mal mit Option Strict ON zu arbeiten.

    mfG

    Derfuhr

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

    Hallo,

    Danke für die Anwort, doch verwendest du einen anderen Code als den hier hochgeladenen?
    den Tip zu e.HasMorePages = false am Ende setzen, brachte auch nicht den Erfolg
    das mit der Option Strict ON nehme ich in Angriff