【问题标题】:Print on multiple pages c#在多页上打印c#
【发布时间】:2012-12-08 13:14:52
【问题描述】:

我想使用 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;
            }

问题是它不停地打印页面。如何跟踪要在页面上打印的行数?

【问题讨论】:

  • 你能重新定义你的问题吗?
  • @pradeepsimha 行数..
  • 那么如果 Values > 48 它应该停止打印,或者如果它小于 48 它应该停止打印?
  • @pradeepsimha 如果它有超过 48 行来创建一个打印页面,等等在 96 来添加一个页面......

标签: c# winforms printing


【解决方案1】:
 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;
    }

【讨论】:

  • 谢谢你的回答,修复foreach()是什么意思?
  • 好的,在从 cmets 看到“值”和“48”可能意味着什么后,我已经重写了它。我猜“行”是一个 DataGridView。请在您的代码中选择更好的名称。
猜你喜欢
  • 1970-01-01
  • 2023-03-21
  • 2015-08-07
  • 2014-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多