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

我有一个应用程序,我必须打印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); 

这是我的渲染完成方法

 public void PrintSales(object sender, RenderingCompleteEventArgs e) { try { reportViewerSales.PrintDialog(); reportViewerSales.Clear(); reportViewerSales.LocalReport.ReleaseSandboxAppDomain(); } catch (Exception ex) { } } 

我只是快速浏览了我创建的直接打印的类,我想我从本演练中获得了一些想法: 打印本地报告而不预览

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

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

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

PrintToPrinter方法将在LocalReportLocalReport 。 可能会帮助别人

 public void PrintSales(object sender, RenderingCompleteEventArgs e) { try { reportViewerSales.PageSetupDailog(); reportViewerSales.PrintDialog(); reportViewerSales.Clear(); reportViewerSales.LocalReport.ReleaseSandboxAppDomain(); } catch (Exception ex) { } }