【问题标题】:How to directly print rdlc report without showing PrintDialog() in C#?如何在 C# 中不显示 PrintDialog() 直接打印 rdlc 报告?
【发布时间】:2013-07-17 00:02:39
【问题描述】:

我有一个应用程序,我必须在不显示 printDialog 并使用应用程序中定义的默认指定打印机的情况下打印RDLC 报告。下面是我的测试实现代码。

    Microsoft.Reporting.WinForms.ReportViewer reportViewerSales = new    Microsoft.Reporting.WinForms.ReportViewer();
    Microsoft.Reporting.WinForms.ReportDataSource reportDataSourceSales = new Microsoft.Reporting.WinForms.ReportDataSource();

    reportViewerSales.Reset();
        reportViewerSales.LocalReport.ReportPath = @"Sales.rdlc";

        reportDataSourceSales.Name = "SalesTableDataSet";

        int i = 1;
        foreach (Product item in ProductSalesList)
        {
            dataset.CurrentSales.AddCurrentSalesRow(i, item.Name, item.Quantity.ToString(), item.Price.ToString(), item.Price.ToString());
            i++;
        }
        reportDataSourceSales.Value = dataset.CurrentSales;
        reportViewerSales.LocalReport.DataSources.Add(reportDataSourceSales);
        dataset.EndInit();

        reportViewerSales.RefreshReport();
        reportViewerSales.RenderingComplete += new RenderingCompleteEventHandler(PrintSales);

这是我的渲染完成方法

public void PrintSales(object sender, RenderingCompleteEventArgs e)
    {
        try
        {

            reportViewerSales.PrintDialog();
            reportViewerSales.Clear();
            reportViewerSales.LocalReport.ReleaseSandboxAppDomain();
        }
        catch (Exception ex)
        {
        }
    }

【问题讨论】:

    标签: c# printing rdlc


    【解决方案1】:

    我只是快速浏览了一个我创建的直接打印的类,我想我从这个演练中得到了一些想法: Printing a Local Report without Preview

    【讨论】:

    • @tezzo 但那是客户端打印吗?
    • 是的,Microsoft.Reporting.WinForms.ReportViewer 和 .LocalReport。
    【解决方案2】:

    我已经为@tezzos 回答了一个扩展类。这可能会更容易。

    使用这个Gist Here 来获取我编写的扩展类。将其包含在您的项目中。不要获取命名空间:D

    LocalReport report = new LocalReport();
                report.ReportEmbeddedResource = "Your.Reports.Path.rdlc";
                report.DataSources.Add(new ReportDataSource("DataSet1", getYourDatasource()));
                report.PrintToPrinter();
    

    PrintToPrinter 方法将在LocalReport 上可用。可能会帮助某人

    【讨论】:

    • 确实帮助了某人。甚至更好:它还解决了无人值守的服务器端打印问题。我唯一需要调整的是页面尺寸,因为我们在这里使用 DIN-A4,很容易在deviceInfo 中完成。真的有必要用不透明的白色矩形清除画布吗?
    【解决方案3】:
    public void PrintSales(object sender, RenderingCompleteEventArgs e)
    {
        try
        {
            reportViewerSales.PageSetupDailog();
            reportViewerSales.PrintDialog();
            reportViewerSales.Clear();
            reportViewerSales.LocalReport.ReleaseSandboxAppDomain();
        }
        catch (Exception ex)
        {
        }
    }
    

    【讨论】:

    • 欢迎来到 Stackoverflow!虽然此代码可能会回答问题,但提供有关此代码为何和/或如何回答问题的额外上下文可提高其长期价值。当答案中有代码时,您还应该使用代码格式。
    • 我不认为。 PageSetupDialog,如果这样拼写,​​将打开一个与 OP 意图相反的交互式对话框(不显示...
    猜你喜欢
    • 2014-03-14
    • 1970-01-01
    • 2018-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-16
    • 2021-05-17
    • 1970-01-01
    相关资源
    最近更新 更多