Hallo liebes Forum,
ich möchte den Inhalt einer DataGridView drucken - die Daten für die 1. Seite sind kein Problem, aber die weiteren ...
mein Code:
wer kann mir helfen?
Gruß
Christian
ich möchte den Inhalt einer DataGridView drucken - die Daten für die 1. Seite sind kein Problem, aber die weiteren ...
mein Code:
Code:
PrivateSub PrintDocument_PrintPage(..) Handles PrintDocument.PrintPage Dim meinDGV As DataGridView = Me.Tbl2100GuidJagdgebietDataGridView Dim gr As Graphics = e.Graphics Dim br As Brush = Brushes.Black Dim rectf, rectPapier, rectTabelle As RectangleF Dim RectX, rectY, rectWidth, rectHeight As Single Dim strTabCol As String = "" Dim iColumns As Integer = Me.Tbl2100GuidJagdgebietDataGridView.Columns.Count Dim iRows As Integer = Me.Tbl2100GuidJagdgebietDataGridView.Rows.Count Dim iColumnsToPrint As Integer = CType(Me.countDGVColumnsVisible(Me.Tbl2100GuidJagdgebietDataGridView), Integer) Dim iColumnsCounter, iColumnsToPrintCounter, iRowsCounter, iRowsOnPage, _ iRowsOnPageCounter, iRowMaxOnPage, iPages, iPagesCounter As Integer Dim aTab() As Single Dim sf As New StringFormat(StringFormatFlags.LineLimit) fnt = fntRegular ReDim aTab(iColumnsToPrint + 1) aTab.SetValue(0, 0) aTab.SetValue(700, 1) aTab.SetValue(800, 2) aTab.SetValue(900, 3) aTab.SetValue(1550, 4) aTab.SetValue(1700, 5) aTab.SetValue(1850, 6) aTab.SetValue(2100, 7) aTab.SetValue(2400, 8) aTab.SetValue(2500, 9) e.Graphics.PageScale = 100 / 100 e.Graphics.PageUnit = GraphicsUnit.Document rectPapier = e.MarginBounds rectTabelle = RectangleF.Inflate(rectPapier, 0, -2 * fnt.GetHeight(e.Graphics)) fnt = fntRegular Dim iAnzahlZeilen As Integer = CType(Math.Floor(rectTabelle.Height / fnt.GetHeight), Integer) iPages = CType(Math.Ceiling(CInt(iRows) / CInt(iAnzahlZeilen)), Integer) Do Until iPagesCounter = iPages 'Eine Wiederholungszeile am Tabellenanfang = SpaltenTitel fnWiederholungsZeile(0, _ meinDGV.Columns.Count, _ CType(Me.countDGVColumnsVisible(meinDGV), Integer), _ gr, _ rectTabelle) iRowsCounter = iPagesCounter * iAnzahlZeilen Select Case iAnzahlZeilen * (iPagesCounter + 1) Case Is < iRows iRowMaxOnPage = iAnzahlZeilen * (iPagesCounter + 1) iRowsOnPage = iAnzahlZeilen Case Is > iRows iRowMaxOnPage = iRows iRowsOnPage = iRows - (iAnzahlZeilen * (iPagesCounter)) End Select 'Tabelle If Not IsNothing(iRows) Or Not iRows = 0 Then Do Until iRowsCounter = iRowMaxOnPage iColumnsToPrintCounter = 0 iColumnsCounter = 0 If Not IsNothing(iColumns) Or Not iColumns = 0 Then Do Until iColumnsCounter = iColumns If meinDGV.Columns.Item(iColumnsCounter).Visible = True Then strTabCol = meinDGV.Rows(iRowsCounter).Cells(iColumnsCounter).FormattedValue.ToString e.Graphics.MeasureString(strTabCol, fnt, rectf.Size, sf, strTabCol.Length, 0) rectHeight = CSng(fnt.GetHeight) * 40 / 10 rectY = rectTabelle.Y + rectHeight + (iRowsOnPageCounter * rectHeight) RectX = rectTabelle.X + CType(aTab.GetValue(iColumnsToPrintCounter), Integer) rectWidth = CSng(aTab.GetValue(iColumnsToPrintCounter + 1)) - CSng(aTab.GetValue(iColumnsToPrintCounter)) rectf = New RectangleF(RectX, _ rectY, _ rectWidth, _ rectHeight) gr.DrawString(strTabCol, fnt, br, rectf, sf) gr.DrawRectangle(Pens.Gray, Rectangle.Ceiling(rectf)) iColumnsToPrintCounter += 1 End If iColumnsCounter += 1 Loop End If iRowsCounter += 1 iRowsOnPageCounter += 1 Loop End If iPagesCounter += 1 e.HasMorePages = (iPages > iPagesCounter) Loop e.Cancel = True End Sub
Gruß
Christian
Comment