-1

数据表 (dt) 包含我要打印的数据。一页可以容纳 15 行。该代码适用于第一页,但注释行不起作用,并且打印了无数页。任何人都可以帮助解决这个问题吗?

private void Doc_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
    for (int y = 0; y <= dt.Columns.Count; y++)
    {
        e.Graphics.DrawLine(Pens.Black, 50 + (y * 150), 150, 50 + (y * 150), 1000);
    }
    for (int x = 0; x < dt.Rows.Count; x++)
    {
        e.Graphics.DrawLine(Pens.Black, 50, 200 + (x * 50), 700, 200 + (x * 50));
    }

    for (int z = 0; z < dt.Rows.Count; z++)
    {
        for (int d = 0; d < dt.Columns.Count; d++)
        {
            string element = dt.Rows[z][d].ToString();
            e.Graphics.DrawString(element, new Font("Arial", 14, FontStyle.Italic), Brushes.Black, 60 + (d * 150), 210 + (50 * Rows));
        }
        //if (z % 15 == 0)
        //{ e.HasMorePages = true; Rows = 0; break; }
        //else { e.HasMorePages = false; }
        Rows++;
    }
}
4

1 回答 1

0

由于打印了无限数量的页面,因此您的问题与您如何确定 if e.HasMorePages=有关true。由于z从 开始0,它永远不会过去15,因为一旦到达15,循环就会中断e.HasMorePages = true,并且再次z= 0。你可以做些什么来解决你的问题是有一个变量来跟踪你打印了多少页。你可以尝试这样的事情:

int pages = 0;
private void Doc_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
//...

    for (int z = pages * 15; z < dt.Rows.Count; z++)
    {
       for (int d = 0; d < dt.Columns.Count; d++)
         {
             //draw text
         }
       if (z - pages * 15 == 15)
       { e.HasMorePages = true; Rows = 0; pages++; break; }
       else { e.HasMorePages = false; }
       Rows++;
    }
} 

编辑:确保pages每次开始打印时都重置为零,否则将无法正确打印。您可以使用该BeginPrint事件。

private void Doc_BeginPrint(object sender, System.Drawing.Printing.PrintEventArgs e) 
{
    pages = 0;
}
于 2013-09-16T00:18:13.600 回答