【问题标题】:Printing using PrintDocument with many rows使用 PrintDocument 打印多行
【发布时间】:2014-02-02 15:46:11
【问题描述】:

请帮助 vb.net 使用打印文档, 如果我在数据库中的特定表中有 100 个或更多数据。如何检索其他信息或数据并在下一页中与其他数据连续打印。

例如:第1页25个数据,第2、3、4页也是25个数据

这是我的代码:

    Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage

    Dim rect As New Rectangle(20, 10, CInt(PrintDocument1.DefaultPageSettings.PrintableArea.Width), Panel2.Height)

    Static startPage As Integer = 0
    For p As Integer = startPage To pages.Count - 1
        Dim cell As New Rectangle(startX, startY, dgw.RowHeadersWidth, dgw.ColumnHeadersHeight)
        e.Graphics.FillRectangle(New SolidBrush(SystemColors.ControlLight), cell)
        e.Graphics.DrawRectangle(Pens.Black, cell)
        startY += dgw.ColumnHeadersHeight
        For r As Integer = pages(p).startRow To pages(p).startRow + pages(p).rows - 1
            cell = New Rectangle(startX, startY, dgw.RowHeadersWidth, dgw.Rows(r).Height)
            e.Graphics.FillRectangle(New SolidBrush(SystemColors.ControlLight), cell)
            e.Graphics.DrawRectangle(Pens.Black, cell)

            startY += dgw.Rows(r).Height
        Next
        startX += cell.Width
        startY = rect.Bottom
        For c As Integer = pages(p).startCol To pages(p).startCol + pages(p).columns - 1
            cell = New Rectangle(startX, startY, dgw.Columns(c).Width, dgw.ColumnHeadersHeight)
            e.Graphics.FillRectangle(New SolidBrush(SystemColors.ControlLight), cell)
            e.Graphics.DrawRectangle(Pens.Black, cell)
            e.Graphics.DrawString(dgw.Columns(c).HeaderCell.Value.ToString, dgw.Font, Brushes.Black, cell, sf)
            startX += dgw.Columns(c).Width
        Next
        startY = rect.Bottom + dgw.ColumnHeadersHeight

        For r As Integer = pages(p).startRow To pages(p).startRow + pages(p).rows - 1
            startX = 50 + dgw.RowHeadersWidth
            For c As Integer = pages(p).startCol To pages(p).startCol + pages(p).columns - 1
                cell = New Rectangle(startX, startY, dgw.Columns(c).Width, dgw.Rows(r).Height)
                e.Graphics.DrawRectangle(Pens.Black, cell)
                e.Graphics.DrawString(dgw(c, r).Value.ToString, dgw.Font, Brushes.Black, cell, sf)
                startX += dgw.Columns(c).Width
            Next
            startY += dgw.Rows(r).Height
        Next
        If p <> pages.Count - 1 Then
            startPage = p + 1
            e.HasMorePages = True
            Return
        Else
            startPage = 0
        End If
    Next

End Sub

【问题讨论】:

    标签: vb.net printing datagridview printdocument


    【解决方案1】:

    好的,首先,除非我非常错误,否则每次调用新页面时都会引发PrintPage。因此,您在PrintPage 事件处理程序中所要做的就是为该特定页面编写内容,而不是一次为所有页面编写内容。

    检索其他数据以及您的主要数据应该不会有任何问题。唯一会带来麻烦的情况是,如果您的其他数据垂直扩展页面,以便可以容纳少于 25 个数据。但是,如果您知道每次都恰好适合 25 个,那么这应该是相当容易的。

    如果您遇到具体问题,请扩展您的问题以说明问题所在,我会尝试回答这些问题。

    您可能还会发现this article 很有用。

    【讨论】:

      猜你喜欢
      • 2013-06-01
      • 1970-01-01
      • 2017-04-13
      • 1970-01-01
      • 1970-01-01
      • 2014-04-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多