2013-06-20 117 views
3

我必須能夠打印在ListView中的所有項目,以便與列名像這樣:PrintDocument的打印問題只打印第一頁

開始:(日期) 結束:(日期) 轉變: (移位號碼) 銷售:(銷售)

它完美打印我需要但它只打印第一頁(或列表視圖的前12行。但是,如果我將信息發送到消息框它發送所有的列表視圖的內容,所以它在打印導致它不打印所有它,但我不知道。

private void btnPrint_Click(object sender, EventArgs e) 
    { 

     try 
     { 
      PrintDialog pd = new PrintDialog(); 
      PrintDocument MyPrintDocument = new PrintDocument(); 
      MyPrintDocument.PrintPage += new PrintPageEventHandler(this.PrintPageEvent); 
      pd.PrinterSettings.PrintRange = PrintRange.AllPages; 
      MyPrintDocument.PrinterSettings.PrintRange = PrintRange.AllPages; 
      MyPrintDocument.Print(); 
     } 
} 


private void PrintPageEvent(object sender, PrintPageEventArgs ev) 
    { 
     string text = null; 
     for (int i = 0; i < listView4.Items.Count; i++) 
     { 
      text += "Start: " + listView4.Items[i].Text + Environment.NewLine + "End: " + listView4.Items[i].SubItems[1].Text + Environment.NewLine + "Shift Number: " + listView4.Items[i].SubItems[2].Text + Environment.NewLine + "Total Sales: " + listView4.Items[i].SubItems[3].Text + Environment.NewLine + "----------------------------" + Environment.NewLine; 
     } 
     MessageBox.Show(text); 
     Font MyFont = new Font("Arial", 12); 
     ev.Graphics.DrawString("------------------------------------" + 
    Environment.NewLine + text + 
    Environment.NewLine + "------------------------------------", MyFont, new SolidBrush(System.Drawing.Color.Black), 
      (ev.PageBounds.Left), ev.PageBounds.Top); 
     } 
+0

我編輯了你的標題。請參閱:「[應該在其標題中包含」標籤「](http://meta.stackexchange.com/questions/19190/)」,其中的共識是「不,他們不應該」。 –

+1

您需要更大的紙張或使用e.HasMorePages屬性。這也要求您繼續打印上一頁中停止的地方。換句話說,你的'i'變量需要是一個類成員,你需要BeginPrint將它重置爲0.迭代器是避免這種情況的好方法。 –

回答

1

您應該指定PrintPageEventArgs.HasMorePages = true來打印多個頁面。所以,你的情況,你可以簡單的做這樣的

ev.HasMorePages = true; 

PrintPageEventArgs.HasMorePages物業 -

  • 獲取或設置附加的頁面是否應打印的價值。
  • 返回true如果應該打印一個附加頁面;否則,false
  • 默認值爲false
+1

我已閱讀關於此問題,但問題是我不知道放在哪裏,我把它放在最後,它只是不斷打印第1 - 12行一遍又一遍。 – user2296611

+0

當我在打印機上重複設置此標誌時,它的卷軸一遍又一遍。 – Bryan

1

當您在PrintPageEvent方法處理程序中打印更多頁面時,您需要設置e.HasMorePages = true;。根據MSDN documentation默認爲false