Announcement

Collapse
No announcement yet.

Drucken - mehr als 1 Seite

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Drucken - mehr als 1 Seite

    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:
    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
    wer kann mir helfen?
    Gruß
    Christian
    Zuletzt editiert von cb4866; 17.09.2008, 10:55. Reason: Formatierung :-(

  • #2
    Hallo,

    vielleicht hilft dir http://www.codeproject.com/KB/grid/P...aGridView.aspx. Der Artikel steht auch unter keiner Lizenz - kann also auch frei angepasst werden.

    mfG Gü
    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

    Comment


    • #3
      danke für den Link!

      Gruß
      Christian

      Comment

      Working...
      X