У меня есть отчет (этикетка), который я печатаю, и он печатает этикетку по одному, потому что я считаю, что я делаю это внутри foreach, вызывая принтер и принтер и PrintToPrinter.Кто-нибудь знает, смогу ли я создать всю таблицу данных, а затем нажать ее для печати один раз, чтобы она печаталась намного быстрее?Прямо сейчас этикетка за этикеткой занимает довольно много времени.
Вот мой код:
protected void printKitLabelsAll(string qty)
{
// Get item, desc from Modata using the order number
OleDbCommand getKitLabel = new OleDbCommand($"SELECT CAST(CITEM as char(30) ccsid 37) , CAST(CDESC as char(30) ccsid 37), CAST(FLSTK as char(30) ccsid 37) " +
$"FROM MODATA WHERE ORDNO = '{orderNumTextBox.Text.ToUpper()}' ORDER BY CITEM", cn);
OleDbDataAdapter kitDa = new OleDbDataAdapter(getKitLabel);
DataTable kitDt = new DataTable();
kitDa.Fill(kitDt);
// For each row get order, item, desc and write to PDF
foreach (DataRow row in kitDt.Rows)
{
// Get default printer
OleDbCommand getPrinter = new OleDbCommand($"SELECT CAST(PRINT as char(50) ccsid 37) FROM EMPSET WHERE EMPNO = '{empNo}'", cnDb9);
cnDb9.Open();
string printName = getPrinter.ExecuteScalar().ToString();
cnDb9.Close();
// Create Document
ReportDocument label = new ReportDocument();
// Load template
label.Load(Server.MapPath("~/Reports/kitLabel.rpt"));
// Set parameters
label.SetParameterValue("order", orderNumTextBox.Text.ToUpper());
label.SetParameterValue("item", row[0].ToString());
label.SetParameterValue("desc", row[1].ToString());
// Print
label.PrintOptions.PrinterName = "TSC";
label.PrintToPrinter(int.Parse(qty), false, 0, 0);
// Dispose label after print
label.Close();
label.Dispose();
}
}