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
お礼
早々のご回答に感謝いたします。 最初の初期化!なるほどです。 していません。 だから、プレビューの後に印刷を実行すると続きのページを作っちゃうのかな? 早速、テストしてみます。 結果がわかりましたら。補足にてご一報入れさせていただきます。 本当に、ありがとうございました。
補足
<<結果報告>> Private Sub PrintDocument1_BeginPrint( _ ByVal sender As Object, _ ByVal e As System.Drawing.Printing.PrintEventArgs) _ Handles PrintDocument1.BeginPrint '****<< ページの初期化 >>******** CurrentPage = 0 'ページ番号のリセット row = 0 'データグリッドビュー行番号のリセット End Sub とドキュメントの最初に初期化させる処理を追加したら直りました(^o^)/ とても助かりました。ありがとうございました。