Ye Koon Po
Ye Koon Po

Reputation: 11

Print on multiple page in VB on VS 2010

Im having problem when printing all rows of data grid view into another page when it exceed the bottom margin. When i click print preview it will keep adding pages non stop.. Here is my code.

  Dim mRow As Integer = 0

    Dim newpage As Boolean = True

    With dgvItems

        Dim fmt As StringFormat = New StringFormat(StringFormatFlags.LineLimit)
        fmt.LineAlignment = StringAlignment.Center
        fmt.Trimming = StringTrimming.EllipsisCharacter
        Dim y As Single = a + 20

        Do While mRow < .RowCount
            Dim row As DataGridViewRow = .Rows(mRow)
            Dim x As Single = e.MarginBounds.Left
            Dim h As Single = 0

            For Each cell As DataGridViewCell In row.Cells

                Dim rc As RectangleF = New RectangleF(x, y, cell.Size.Width, 70)
                e.Graphics.DrawRectangle(Pens.Black, rc.Left, rc.Top, rc.Width, rc.Height)

                If (newpage) Then
                    e.Graphics.DrawString(dgvItems.Columns(cell.ColumnIndex).HeaderText, .Font, Brushes.Black, rc, fmt)

                Else
                    e.Graphics.DrawString(dgvItems.Rows(cell.RowIndex - 1).Cells(cell.ColumnIndex).FormattedValue.ToString(), .Font, Brushes.Black, rc, fmt)

                End If

                x += rc.Width

                h = Math.Max(h, rc.Height)

            Next

            newpage = False
            y += h
            mRow += 1

            If y + h > e.MarginBounds.Bottom Then
                e.HasMorePages = True
                mRow = 1
                newpage = True
                Exit Sub
            End If
        Loop
        mRow = 0

    End With

I would also like to ask about how to set the header and footer of vb in Visual studio 2010 so that the header and footer can be print in all pages..

Upvotes: 1

Views: 1647

Answers (1)

user3450006
user3450006

Reputation: 21

Hope this helps:

Private index As Integer
Private Sub Print(...) Handles PrintDocument1.PrintPage
   Dim row As Integer = {some point you want to start at}
  'Paint a title - since this event fires for each page
  'continue loop or start loop
  For i As Integer = index To myList.Count - 1
   If Not row = e.MarginBounds.Bottom - 12 Then
    'remember where we are in the list
    index = i
    'paint your contents
   Else
    'start new page
    e.HasMorePages = True
    Exit Sub
   End If
  Next
  'reset the index for next print job
  If Not e.HasMorePages Then index = 0 
 End Sub

Upvotes: 1

Related Questions