1

当数据网格视图的所有行超过下边距时,我在将所有数据网格视图打印到另一页时遇到问题。当我单击打印预览时,它将不断添加页面。这是我的代码。

  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

我也想问一下如何在Visual Studio 2010中设置vb的页眉和页脚,以便在所有页面中都可以打印页眉和页脚。。

4

1 回答 1

1

希望这可以帮助:

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
于 2014-03-22T18:37:47.390 回答