C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: datagridviewの印刷プレビューから印刷が出来ない


(過去ログ 125 を表示中)

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■74434 / inTopicNo.1)  datagridviewの印刷プレビューから印刷が出来ない
  
□投稿者/ ともこ (1回)-(2014/12/28(Sun) 10:49:37)

分類:[C#] 

visual c# datagridviewの複数ページの印刷で困っています。プレビューでは1ページ目も2ページ目も3ページ目も表示されるのですが印刷ができません。
印刷、プレビューもform2に表示して作業していますが一回しか表示されず二回目は表示されません。form1に一旦切り替えてまたform2に戻ると表示されます。
環境はOSがvista ,visual c# 2010 proで,sqlserver2008またはaccess2000をdatabaseとして使用しています。
コードは以下の通りです。宜しくお願いします。

private void button2_Click(object sender, EventArgs e)//
  {
      // 用紙の向きを設定(横:true、縦:false)
     using (PrintDocument printDocument1 = new PrintDocument())//doc
            {
                // 用紙の向きを設定(横:true、縦:false)
                printDocument1.DefaultPageSettings.Landscape = true;//doc

      // プリンタがサポートしている用紙サイズを調べる
                foreach (PaperSize ps in printDocument1.PrinterSettings.PaperSizes)
      {
          // A4用紙に設定する
          if (ps.Kind == PaperKind.A4)
          {
              printDocument1.DefaultPageSettings.PaperSize = ps;
              break;
          }
      }

      // PrintPage イベントハンドル追加
                printDocument1.PrintPage += new PrintPageEventHandler(printDocument1_PrintPage);

      // ページ番号初期化
      
      // プレビュー画面表示
      using (PrintPreviewDialog previewDlog = new PrintPreviewDialog())
      {

          // 印刷ドキュメント指定
          previewDlog.Document = printDocument1;

          // 表示位置とサイズ設定
          previewDlog.StartPosition = FormStartPosition.CenterScreen;
          previewDlog.Size = new Size(800, 600);

          // プレビュー画面表示
          previewDlog.ShowDialog(this);
      }
  }
}

 private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
        {
           //フォント
            Font f = new Font("MS 明朝", 11);
            //行ピッチ
            int pitch = f.Height + 5;
            //印刷開始位置
            int x = e.MarginBounds.Top;
            int y = e.MarginBounds.Left;
            //1ページの行数
            int PageLines = 20;//(e.MarginBounds.Height / pitch) - 0;
             //フィールド名を印刷
            e.Graphics.DrawString(
                syuuriDataSet1.sekou.idColumn.ColumnName.PadRight(10) +
                syuuriDataSet1.sekou.名前Column.ColumnName.PadRight(40) +
                syuuriDataSet1.sekou.所属Column.ColumnName.PadLeft(5) + "    " +
                syuuriDataSet1.sekou.性別Column.ColumnName.PadRight(10, ' '),
                new Font("MS ゴシック", 11), Brushes.Black,x, y);
            //区切り線
            y = y + pitch;
            e.Graphics.DrawLine(Pens.Black, x, y, x + 650, y);
            //-----
            //印刷開始位置
            y = y + pitch;
            //印刷した行数
            int cnt = 0;
            //テーブルの内容を印刷
            while (pos < syuuriDataSet1.sekou.Rows.Count)
            {
                //レコードが削除されているとき
                if (syuuriDataSet1.sekou[pos].RowState == DataRowState.Deleted)
                {
                    //レコード番号を更新
                    pos = pos + 1;
                    continue;
                }

                //1レコードを出力
                e.Graphics.DrawString(
                    syuuriDataSet1.sekou[pos].id.ToString().PadRight(10) +
                    syuuriDataSet1.sekou[pos].名前.ToString().PadRight(20, ' ') +
                    syuuriDataSet1.sekou[pos].所属.ToString().PadLeft(5) + "    " +
                    syuuriDataSet1.sekou[pos].性別.ToString().PadRight(10, ' '),
                    f, Brushes.Black,  x, y + (pitch * cnt));
                 //レコード番号、印刷位置の更新
                pos = pos + 1;
                cnt = cnt + 1;
                //改ページの確認
                if (cnt >= PageLines)
                {
                    e.HasMorePages = true;
                    break;
                }
        }

引用返信 編集キー/
■74435 / inTopicNo.2)  Re[1]: datagridviewの印刷プレビューから印刷が出来ない
□投稿者/ とっちゃん (288回)-(2014/12/28(Sun) 17:06:28)
とっちゃん さんの Web サイト
No74434 (ともこ さん) に返信
> visual c# datagridviewの複数ページの印刷で困っています。プレビューでは1ページ目も2ページ目も3ページ目も表示されるのですが印刷ができません。
> 印刷、プレビューもform2に表示して作業していますが一回しか表示されず二回目は表示されません。form1に一旦切り替えてまたform2に戻ると表示されます。
> 環境はOSがvista ,visual c# 2010 proで,sqlserver2008またはaccess2000をdatabaseとして使用しています。
> コードは以下の通りです。宜しくお願いします。

時間があったので、コードを追ってみました。

> private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
> {
> // 省略
> //テーブルの内容を印刷
> while (pos < syuuriDataSet1.sekou.Rows.Count)
> {
> // 省略
> }
> }
このループの、pos は、クラスメンバーですか?
だとすると、どこかでリセットされるタイミングがありますか?
おそらく、この数値が、リセットされないため、プレビューした結果、カウントが末尾まで到達してしまい、
以後印刷はもちろんプレビューもうまくいかないのではないかと思います。

まぁ、断片なのでこれが原因かどうかについてはわかりませんけどね。


引用返信 編集キー/
■74436 / inTopicNo.3)  Re[2]: datagridviewの印刷プレビューから印刷が出来ない
□投稿者/ ともこ (2回)-(2014/12/28(Sun) 22:59:21)
No74435 (とっちゃん さん) に返信
初心者ですみません。pos は、クラスメンバーですね。”カウントが末尾まで到達してしまい、”とは平たく言うとどういうことなのでしょうか。
超がつく初心者です。よろしくお願いします。

引用返信 編集キー/
■74437 / inTopicNo.4)  Re[3]: datagridviewの印刷プレビューから印刷が出来ない
□投稿者/ とっちゃん (289回)-(2014/12/29(Mon) 01:56:40)
とっちゃん さんの Web サイト
No74436 (ともこ さん) に返信
> pos は、クラスメンバーですね。”カウントが末尾まで到達してしまい、”とは平たく言うとどういうことなのでしょうか。
<<一部省略>>

先のコメントで残しておいたコード部分。
while( pos < syuuriDataSet1.sekou.Rows.Count )
{ ... }
という、ループになっていて、このループの中で印刷処理を行っています。

このループに入るためには、pos の値が syuuriDataSet1.sekou.Rows.Count よりも小さな値である必要があります。
それが、”カウントが末尾まで到達してしまい、”ということです。

pos の値が表現しているものが何か(意味は一つとは限りません)を改めてよく考えてみるとよいと思いますよ。

引用返信 編集キー/
■74438 / inTopicNo.5)  Re[1]: datagridviewの印刷プレビューから印刷が出来ない
□投稿者/ shu (652回)-(2014/12/29(Mon) 07:48:14)
No74434 (ともこ さん) に返信

PrintDocumentのBeginPrintで初期化処理を行う必要があります。
PrintDocumentを使うときはPrintPageだけでなくBeginPrintも実装するように
した方がよいです。印刷後不要なものがあればEndPrintも欲しいところ。
引用返信 編集キー/
■74439 / inTopicNo.6)  Re[2]: datagridviewの印刷プレビューから印刷が出来ない
□投稿者/ ともこ (3回)-(2014/12/29(Mon) 09:39:13)
No74438 (shu さん) に返信
> ■No74434 (ともこ さん) に返信
>

とっちゃんさん、shuさんありがとうございました。ご教示をもとにさっそく試してみたいとおもいます。よろしくお願いします。
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -