トップ回答者
印刷時に最終ページに追加したデータ部分のみを改ページできますか?

質問
-
こんにちはzen73です。いつもお世話になってます。
dataGridViewのデータ(テストの得点順位表)を印刷しています。
最終ページに平均点を追加して表示していますが,
平均点が最終ページ内に収まりきれない場合が想定されます。
この場合,
ページからはみ出したデータ(平均点)を次ページに表示することは可能でしょうか。private void printDocument1_PrintPage(object sender,
System.Drawing.Printing.PrintPageEventArgs e)
{
do
{
・・・・・・・・・・・・・・・・・・・・・
//改ページの確認
if (cnt >= maxrow)
{
e.HasMorePages = true;
break;
}
} while (rnum != dataGridView1.RowCount - 1);
if (rnum == dataGridView1.RowCount - 1)
{
//最終ページにクラス毎男女別平均点を追加
}
}
回答
すべての返信
-
仲博俊さん,ありがとうございます。
できないものとばかり思い込んでいましたが,可能と知り喜んでいますが実現の方法がわかりません。プログラムは下のようなつくりになっています。
cntで行数をウオッチしており,cntが50を超えた所で改ページさせたいのです。
Aの場所で判断させたところ,dataGridViewのデータを読みに行ってしまいました。
どの場所で,どのようにe.HasMorePages = true;を判断させるのでしょうか。
if (rnum == dataGridView1.RowCount - 1)
{
//最終ページにクラス毎男女別平均点を追加
for(int i=0;i<5;i++)
{
e.Graphics.DrawString(<i組男子の平均点>)
cnt++;
e.Graphics.DrawString(<i組女子の平均点>)
cnt++;
e.Graphics.DrawString(<i組全体の平均点>)
cnt++;
--A--
}
e.Graphics.DrawString(<学年男子の平均点>)
cnt++;
e.Graphics.DrawString(<学年女子の平均点>)
cnt++;
e.Graphics.DrawString(<学年全体の平均点>)
cnt++;
} -
HasMorePages = trueにすると、そこで改ページされるということではありません。もう一度、PrintPageイベントを起こしてね。と、お願いすることになります。つまり、1ページ毎にPrintPageイベントプロシージャで書き出していくことになります。
今回の場合は、書きたい内容を全てstring配列に入れておき、それを順番に書いていった方が簡単だと思います。
一例ですが、以下に示します。
#頭の中で考えているだけなので、この通りでは動かないかもしれません。string [] arrStr に書きだしたい内容を全部入れておく。
int pageCnt = 0; に、何ページまで印刷したかを覚えておく。private void printDocument1_PrintPage(object sender,
System.Drawing.Printing.PrintPageEventArgs e)
{
lineCnt = 0;while (arrStrがある限り && lineCnt < 50)
{
arrStr[pageCnt * 50 + lineCnt]をDrawString
lineCnt++;
}if (arrStrを全部印刷してない)
{
pageCnt++;
HasMorePges = true;
}
else
HasMorePges = false;}