如何直接打印rdlc报告而不在C#中显示PrintDialog()?

Red*_*one 13 c# printing rdlc

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

    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);
Run Code Online (Sandbox Code Playgroud)

这是我的渲染完成方法

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

            reportViewerSales.PrintDialog();
            reportViewerSales.Clear();
            reportViewerSales.LocalReport.ReleaseSandboxAppDomain();
        }
        catch (Exception ex)
        {
        }
    }
Run Code Online (Sandbox Code Playgroud)

tez*_*zzo 12

我刚刚快速浏览了一个我直接打印的类,我想我从这个演练中得到了一些想法: 打印本地报告而不预览


sha*_*e93 11

我已经为@tezzos答案做了一个扩展课程.这可能会使它更容易.

使用此Gist Here来获取我写的扩展类.将它包含在您的项目中.不要获取命名空间:D

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

PrintToPrinter方法将可用LocalReport.可能会帮助别人