Rest zum anhängen:
hoffe das es klappt
For i = 0 To (lst_Header.Count - 1)
ZellBox = New RectangleF(PosX, PosY, SpaltenBreiten(i), TextHöhe)
ZellInhalt = lst_Header.Item(i)
e.Graphics.FillRectangle(New SolidBrush(HeaderColor), ZellBox) _
'Zelle ausfüllen
e.Graphics.DrawRectangle(Pens.Black, ZellBox.X, ZellBox.Y, _
ZellBox.Width, ZellBox.Height) 'DruckerGitternetzlinien
e.Graphics.DrawString(ZellInhalt, DGV_Font, Brushes.Black, ZellBox, _
sf) 'Spaltentext
PosX += SpaltenBreiten(i)
Next
'Zeileninhalte drucken
Dim nächste_TextHöhe As Single 'Texthöhe des nächsten Datensatzes
Dim curr_Zelle As DataGridViewCell = Nothing
Dim pen_dünn As New Pen(Brushes.Black)
pen_dünn.Width = 0.2F
sf.Alignment = StringAlignment.Center
sf.LineAlignment = StringAlignment.Center
DruckZeile = 0
PosX = rect_Druckbereich.Left
PosY += ZellBox.Height
Dim Schreibbox As New RectangleF
Do
DruckSpalte = 0
TextHöhe = ZeilenHoehen(DruckZeile + DGVZeilenIndex)
'Gesamtlisten-Ende
If ((DruckZeile + DGVZeilenIndex) < (MaxZeilenIndex)) Then
nächste_TextHöhe = ZeilenHoehen(DruckZeile + DGVZeilenIndex + 1)
If ((rect_Druckbereich.Height + rect_Druckbereich.Top) < (PosY _
+ TextHöhe) + 1) Then
Exit Do
End If
End If
Do
curr_Zelle = DGV.Rows(DruckZeile + DGVZeilenIndex).Cells( _
DruckSpalte)
ZellInhalt = curr_Zelle.FormattedValue.ToString
ZellBox = New RectangleF(PosX, PosY, SpaltenBreiten( _
DruckSpalte), TextHöhe)
Schreibbox = New RectangleF(ZellBox.X + 4, ZellBox.Y, _
ZellBox.Width - 8, ZellBox.Height)
'Beg: DruckerGitternetzlinien nur Äusserer Rahmen
e.Graphics.DrawLine(pen_dünn, ZellBox.X, ZellBox.Y + _
ZellBox.Height, ZellBox.X + ZellBox.Width, ZellBox.Y + _
ZellBox.Height)
If DruckSpalte = 0 Then
e.Graphics.DrawLine(pen_dünn, PosX, PosY, PosX, PosY + _
ZellBox.Height)
ElseIf DruckSpalte = 4 Then
e.Graphics.DrawLine(pen_dünn, ZellBox.X + ZellBox.Width, _
PosY, ZellBox.X + ZellBox.Width, PosY + ZellBox.Height)
End If
'End: DruckerGitternetzlinien
'Textausrichtung je nach Spalte
If DruckSpalte = 1 Or DruckSpalte = 2 Or DruckSpalte = 3 Or _
DruckSpalte = 4 Then
sf.Alignment = StringAlignment.Center
Else
sf.Alignment = StringAlignment.Near
End If
e.Graphics.DrawString(ZellInhalt, DGV_Font, Brushes.Black, _
Schreibbox, sf)
PosX += SpaltenBreiten(DruckSpalte)
DruckSpalte += 1
Loop Until (DruckSpalte > MaxSpaltenIndex)
PosX = rect_Druckbereich.Left
PosY += TextHöhe
DruckZeile += 1
If ((DruckZeile + DGVZeilenIndex) > (MaxZeilenIndex)) Then
Exit Do
End If
Loop
'Status
If (DruckZeile + DGVZeilenIndex) > (MaxZeilenIndex) Then
e.HasMorePages = False
DGVZeilenIndex = 0
DruckSpalte = 0
DruckZeile = 0
DruckSeite = 0
'Aufräumen
lst_Header.Clear()
pen_dünn.Dispose()
sf.Dispose()
Titel_Font.Dispose()
Titel_FontK.Dispose()
DGV_Font.Dispose()
curr_Zelle.Dispose()
e.Graphics.Dispose()
Exit Sub
Else
e.HasMorePages = True
DGVZeilenIndex = DruckZeile + DGVZeilenIndex
'Aufräumen
lst_Header.Clear()
pen_dünn.Dispose()
sf.Dispose()
Titel_Font.Dispose()
Titel_FontK.Dispose()
DGV_Font.Dispose()
curr_Zelle.Dispose()
e.Graphics.Dispose()
Exit Sub
End If
End Sub |