データベースからPrintDocumentに印刷をする場合はいろいろなサイトで紹介されているが、DataGridViewを印刷し且つ、複数ページで印刷をする場面の紹介がないので考えてみました。
ようやくPrintDocumentの挙動がすっきりしました。
今回の例は1行1ページで印刷する場合です。
結果は以下に
'------------------------------------------------------------------------------------------------
Dim CurrentPage As Integer '現在のページ数を記録する
Dim EndPage As Integer '最終ページ
'------------------------------------------------------------------------------------------------
Private Sub btnPrint_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPrint.Click
CurrentPage =0 'ここで初期化。
EndPage = DataGridView1.NewRowIndex-1'データグリッドの最終行
PrintDocument1.Print()
End Sub
'------------------------------------------------------------------------------------------------
Private Sub btnPreview_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnPreview.Click
CurrentPage =0 'ここで初期化。
EndPage = DataGridView1.NewRowIndex-1'データグリッドの最終行
PrintPreviewDialog1.ShowDialog()
End Sub
'------------------------------------------------------------------------------------------------
Private Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
Dim f As Font
f = New Font("MS ゴシック", 16) Dim
P1 As New Pen(Color.Blue, 1)
e.Graphics.DrawString(Trim(DataGridView1.Rows(CurrentPage).Cells(3).Value), f, Brushes.Black, 50, 300)
If CurrentPage= EndPage Then'最終ページの場合はe.HasMorePages = False それ以外は次ページ
e.HasMorePages = False
Else
e.HasMorePages = True
End If
CurrentPage += 1
End Sub
'------------------------------------------------------------------------------------------------
以上でLoop処理は不要で出来る。
LoopやFor処理は1ページで20行を印刷する場合などになります。
ページと行管理をきちんと行うことになります。
0 件のコメント:
コメントを投稿