2010年7月5日月曜日

vb.net DataGridViewの内容を1行1ページずつ印刷する PrintDocument

データベースから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 件のコメント: