VB2010DataGridView複数ページ印刷
VB2010のDataGridViewで複数ページの印刷を試みています。
改ページに悩んでいます。「e.HasMorePages=True」で改ページは可能ですが、1ページ目も2ページ目も同じ内容が印刷されます。
1ページに30行を印刷する予定ですので、2ページ目には31行目から印刷をしたいのです。
現在、いろいろ参考にしまして、コーディングは進んでいますが、30行の指定がページ目いっぱいまで印刷される点と、2ページ目以降の印刷ができない点に悩んでいます。
書き上げたコードを記述しますので、ご存知の方が居られましたら、ご教授ください。
Dim reader As IO.StreamReader
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
PrintPreviewDialog1.ShowDialog()
PrintPreviewDialog1.Document = PrintDocument1
'file()
' 印刷処理を実行
'PrintDocument1.Print()
'PrintForm1.Print(Me, PowerPacks.Printing.PrintForm.PrintOption.FullWindow)
'PrintDocumentオブジェクトの作成
Dim pd As New System.Drawing.Printing.PrintDocument
'PrintPageイベントハンドラの追加
AddHandler pd.PrintPage, AddressOf pd_PrintPage
'PrintDialogクラスの作成
Dim pdlg As New PrintDialog
'PrintDocumentを指定
pdlg.Document = pd
'印刷の選択ダイアログを表示する
If pdlg.ShowDialog() = DialogResult.OK Then
'OKがクリックされた時は印刷する
pd.Print()
End If
End Sub
Dim page As Integer = 0 '現在のページ
Private Const MaxLine As Integer = 30 '1ページ30行
Private Sub pd_PrintPage(ByVal sender As Object, _
ByVal e As System.Drawing.Printing.PrintPageEventArgs)
page += 1
'グラフィックの定義
Dim g As Graphics = e.Graphics
'総行数をallrowとする
Dim allrow As Integer = DataGridView1.Rows.Count - 1
'文字列を描く
'g.DrawString(DataGridView1(0, 0).Value, _
' New Font("MS Pゴシック", 9), Brushes.Black, e.MarginBounds.Left, e.MarginBounds.Top)
Dim X As Integer
Dim Y As Integer
Y = e.MarginBounds.Top
For i As Integer = 0 To DataGridView1.Rows.Count - 1
X = e.MarginBounds.Left
For j As Integer = 0 To DataGridView1.Columns.Count - 1
Dim s As String
If DataGridView1(j, i).Value Is Nothing Then
s = ""
Else
s = DataGridView1(j, i).Value
End If
g.DrawString(s, New Font("MS Pゴシック", 9), Brushes.Black, X, Y)
'g.DrawString(DataGridView1(j, i).Value.ToString, _
' New Font("MS Pゴシック", 9), Brushes.Black, X, Y)
X += DataGridView1.Columns(j).Width
Next j
Y += DataGridView1.Rows(i).Height
Next i
'現在のページが総ページ数より少ない場合は、次ページへ
If page < (allrow \ MaxLine + 1) Then
e.HasMorePages = True
Else
'このページで終了
e.HasMorePages = False
End If
End Sub
お礼
この辺のDataGridViewのセルの処理は複雑みたいですね。 ありがとうございます。参考になりました。