C#和Crystal报表-批量打印

C#和Crystal报表-批量打印,c#,visual-studio,printing,crystal-reports,C#,Visual Studio,Printing,Crystal Reports,我有一个我打印的报告(标签),它一次打印一个标签,我相信这是因为我在一个叫printer、printer和PrintTopPrinter的foreach中进行的。有人知道我是否可以创建整个datatable,然后将其推到打印一次,以便打印速度更快吗?现在一个标签接一个标签是相当耗时的 这是我的密码: protected void printKitLabelsAll(string qty) { // Get item, desc from Modata using the order nu

我有一个我打印的报告(标签),它一次打印一个标签,我相信这是因为我在一个叫printer、printer和PrintTopPrinter的foreach中进行的。有人知道我是否可以创建整个datatable,然后将其推到打印一次,以便打印速度更快吗?现在一个标签接一个标签是相当耗时的

这是我的密码:

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();
    }

}

在报表设计中(在Crystal Designer中),删除项和Descr参数。换句话说,报告应该简单地显示订单的所有项目。 将代码更改为仅将Order参数输入报告


让Crystal报表直接从数据源检索数据。它可以很容易地为订单中的每个行项目获取一条记录。

标签需要显示所有3条记录。。。它是一个1x3标签,放在所有零件上,他们必须看到每个标签上的顺序、项目、描述…@ksuProgrammer,软件的意思是,这些值不应该是参数。它们应该是报表中的字段。您需要重新设计报表以包含这些字段,然后只需加载报表并进行打印。您可以在打印时使用数据表进行此操作,还是我必须将其发送到报表查看器才能进行此操作?