簡體   English   中英

使用具有多行的PrintDocument打印

[英]Printing using PrintDocument with many rows

如果我在數據庫的特定表中有100個或更多數據,請使用打印文檔在vb.net中提供幫助。 我如何檢索其他信息或數據並在下一頁中連續打印其他數據。

例如:在第一頁中有25個數據,在第二,第三和第四頁中也有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

好,首先,除非我非常錯誤,否則每次調用新頁面時都會引發PrintPage 因此,您在PrintPage事件處理程序中要做的就是為該特定頁面編寫內容,而不是一次為所有頁面編寫內容。

檢索其他數據以及主要數據應該沒有任何麻煩。 唯一會麻煩的是,如果您的其他數據垂直擴展了頁面,則只能容納少於25個數據。 但是,如果您每次都恰好適合25個人,這應該很容易。

如果您遇到特定的問題,請擴展您的問題以說明問題所在,我將嘗試回答。

您可能還會發現本文很有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM