2012-12-08 137 views
3

我想用c#打印更多页面。在printDocument1_PrintPage函数中打印我有的文档:在多个页面上打印c#

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

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

问题在于它不停地打印页面。我如何跟踪要在页面上打印多少行?

+0

这是什么_values_? –

+0

你能重新定义你的问题吗? – ttkalec

+0

@pradeepsimha行数.. –

回答

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; 
    } 
+0

谢谢你的答案,你是什么意思修复foreach()? –

+0

你会发现,写我的代码。 –

+0

好的,我从评论中看到“价值”和“48”可能意味着什么,我已经重写了它。我猜想“行”是一个DataGridView。请在您的代码中选择更好的名称。 –