2009-11-08 58 views
1

我有一個問題,打印listView項目。 我認爲這個問題是在private void PrintPageDetail(PrintPageEventArgs e) 因此,這是怎麼回事:問題打印在C#中多次使用ListView。無法弄清楚

任何唱完一個適合頁面
  1. 它打印。 (打印的數據比打印的數據更多),但頁面頁腳和頁眉用正確的頁碼打印OK。而且我每次都很難清除內存以將新數據映射到下一頁。

  2. 打印預覽和打印不會停止,除非我點擊取消(可能由於無限循環「返回」)。

感謝您的幫助

private void PrintDocument(object sender, PrintPageEventArgs e) 
    { 
     // Use inches for all measurements. 

     e.Graphics.PageUnit = GraphicsUnit.Inch; 

     PrintPageHeader(e); 

     PrintPageDetail(e); 

     PrintPageFooter(e); 
    } 

    // Print the page header/footer/details. 
    private void PrintPageHeader(PrintPageEventArgs e) 
    { 
     e.Graphics.DrawString("Factors List Report", 
           _headerFont, _reportBrush, 3.0F, 0.75F); 
     e.Graphics.DrawLine(_reportPen, 0.5F, 1.15F, 7.5F, 1.15F); 
    } 

    private void PrintPageFooter(PrintPageEventArgs e) 
    { 
     e.Graphics.DrawLine(_reportPen, 1.0F, 10.0F, 7.5F, 10.0F); 

     e.Graphics.DrawString("Printed on " + DateTime.Now.ToLongDateString(), 
           _footerFont, _reportBrush, 1F, 10.2F); 

     _pageNumber++; 
     e.Graphics.DrawString(string.Format("Page: {0}", _pageNumber), 
           _footerFont, _reportBrush, 7F, 10.2F); 
    } 

    private void PrintPageDetail(PrintPageEventArgs e) 
    { 
     // Create variables to hold position on page. 
     float leftMargin = e.MarginBounds.Left; 
     float topMargin = e.MarginBounds.Top; 
     float i = 1.25F; 


     e.HasMorePages = false; 
     foreach (string printerLine in _factorsView) 
     { 
      e.Graphics.DrawString(printerLine, _detailFont, _reportBrush, 1.0F, i); 


      if (i >= 9.75) 
      { 
       i += 1.25F; 
       e.HasMorePages = true; 
       return; 
      } 
      else 
       i += .25F; 
     } 
    } 
} 

回答

0

的問題是,每次你進入PrintPageDetail(PrintPageEventArgs E)的時候,你在_factorsView年初啓動,因爲你使用的是foreach循環。您需要跟蹤您在此方法之外的位置。事情是這樣的:

int myLocation = 0; 

private void PrintPageDetail(PrintPageEventArgs e) 
    { 
     // Create variables to hold position on page. 
     float leftMargin = e.MarginBounds.Left; 
     float topMargin = e.MarginBounds.Top; 
     float i = 1.25F; 


     e.HasMorePages = false; 
     while(myLocation < _factorsView.Length) 
     { 
      e.Graphics.DrawString(_factorsView[myLocation], _detailFont, _reportBrush, 1.0F, i); 
      myLocation++; 


      if (i >= 9.75) 
      { 
       i += 1.25F; 
       e.HasMorePages = true; 
       return; 
      } 
      else 
       i += .25F; 
     } 
    } 

我不知道是什麼類型_factorsView那麼索引可能取決於它是什麼類型的改變,但應該給你一個想法。