2017-10-30 7 views
1

1ページに20行を印刷したい。私は、各ループごとにデータテーブルからデータを取得します。データテーブルから20ページを1ページに印刷

行が20未満の場合はすべて正常に動作します。行が20より大きい場合、コードは2ページ目を印刷できません。

解決策を見つけるために、以下のコードをご覧ください。

 int CurrentRecord = 0; 
     int RecordsPerPage = 20; // twenty items in a page 
     decimal Amount = 0; 
     bool StopReading = false; 

    foreach (DataRow row in table.Rows) 
     { 

       string ItemCode = row["ItemCode"].ToString(); 
       g.DrawString(ItemCode, InvoiceFont, BlackBrush, xProductID, CurrentY); 

       string PartName = row["PartName"].ToString(); 
       if (PartName.Length > 20) 
        PartName = PartName.Remove(20); 
       g.DrawString(PartName, InvoiceFont, BlackBrush, xProductName, CurrentY); 

       string Id = row["Identification"].ToString(); 
       g.DrawString(Id, InvoiceFont, BlackBrush, xId, CurrentY); 

       string Size = row["Sizes"].ToString(); 
       g.DrawString(Size, InvoiceFont, BlackBrush, xSize, CurrentY); 

       string Chasis = row["Chasis"].ToString(); 
       if (Chasis.Length > 6) 
        Chasis = Chasis.Remove(7); 
       g.DrawString(Chasis, InvoiceFont, BlackBrush, xChasis, CurrentY); 


       string Qty = row["Qty"].ToString(); 
       g.DrawString(Qty, InvoiceFont, BlackBrush, xQty, CurrentY); 


       string Rate = row["Rate"].ToString(); 
       g.DrawString(String.Format("{0:0.0}", Rate), InvoiceFont, BlackBrush, xPrice, CurrentY); 


       //string t =Convert.ToInt32(row["Total"].ToString()); 

       string Total = row["Total"].ToString(); 

       // FieldValue = String.Format("{0:0.00}", Amount); 
       int xAmount = AmountPosition + (int)g.MeasureString("Price", InvoiceFont).Width; 
       xAmount = xAmount - (int)g.MeasureString("Total", InvoiceFont).Width; 
       // txtTotal.Text = Convert.ToInt32 (xAmount).ToString("N"); 

       g.DrawString(Total, InvoiceFont, BlackBrush, xAmount, CurrentY); 


       CurrentY = CurrentY + InvoiceFontHeight; 

       CurrentRecord++; 

      if (CurrentRecord > RecordsPerPage) 
      { 
       e.HasMorePages = true; 
       CurrentRecord = 0; 
       // CurrentY = 20; 

      } 
      else 
      { 
        e.HasMorePages = false; 
      } 

     } 
+1

をし、コードをステップ実行します。 'CurrentRecord> RecordsPerPage'の後に続けて印刷します。 –

答えて

0

フォームレベルの変数を宣言します。

int printRow = 0; 

あなたが印刷またはBeingPrintイベントで、ゼロにPRINTROWの値を設定する前に。あなたのインデックス位置するたびにページのプリントを追跡する必要があるため

あなたは、このケースでのForEachを使用することはできません。デバッガで `e.HasMorePages = true`をにブレークポイントを設定

int recordsPerPage = 20; 
int rowsPrinted = 0; 

for (; printRow < table.Rows.Count; printRow++) { 
    DataRow row = table.Rows[printRow]; 

    // print code 

    rowsPrinted++; 
    if (rowsPrinted >= recordsPerPage && printRow < table.Rows.Count - 1) { 
    printRow++; 
    e.HasMorePages = true; 
    break; 
    } 
} 
+0

もしあなたが何か考えているなら、下のリンクも見てください –

+0

https://stackoverflow.com/questions/46591533/after-posting-data-return-page-didt-show-completely?noredirect=1#comment80137272_46591533 –

+0

@SMそれはASP.Netについてだから私はそのリンクされた質問に多くの助けができない。私は主にデスクトップソフトウェアを勉強しました。 – LarsTech