3

c# を使用してより多くのページを印刷したいと思います。私が持っているドキュメントを印刷する関数printDocument1_PrintPageで:

 int values = 0;
 foreach (DataRow row in rows.Rows)

            values++;
           if (values > 48)
            {
                e.HasMorePages = true;
                values = 0;
            }
            else
            {
                e.HasMorePages = false;
            }

問題は、ページを停止せずに印刷し続けることです。ページに印刷する行数を追跡するにはどうすればよいですか?

4

1 に答える 1

4
 int values = 0;
 foreach (DataRow row in rows.Rows)

それは機能しません。すべてのページで0から値を開始します。だからそれは決して止まらない。変数をPrintPageメソッドの外に移動する必要があります。また、BeginPrintを実装して、0からやり直す必要があります。foreach()も問題があるため、すべてのページの最初からやり直したくありません。したがって、次のように書き直します。

    private int PrintRow;

    private void printDocument1_BeginPrint(object sender, System.Drawing.Printing.PrintEventArgs e) {
        PrintRow = 0;
    }

    private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e) {
        for (int lines = 0; lines < 48; ++lines) {
            PrintRow++;
            if (PrintRow >= rows.Rows.Count) return;  // Done printing
            var row = rows.Rows[PrintRow];
            // Print row
            //...
        }
        e.HasMorePages = PrintRow < rows.Rows.Count;
    }
于 2012-12-08T13:30:21.103 に答える