Reputation: 11
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
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