Ответ 1
Я просто быстро посмотрел на класс, который я создал для печати напрямую, и я думаю, что взял некоторые идеи из этого пошагового руководства: Печать локального отчета без предварительного просмотра
У меня есть приложение, в котором мне нужно распечатать отчет 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 здесь, чтобы получить класс расширения, который я написал. включить его в свой проект. не для получения пространства имен: D
LocalReport report = new LocalReport();
report.ReportEmbeddedResource = "Your.Reports.Path.rdlc";
report.DataSources.Add(new ReportDataSource("DataSet1", getYourDatasource()));
report.PrintToPrinter();
Метод PrintToPrinter
будет доступен в LocalReport
. Может помочь кому-то
public void PrintSales(object sender, RenderingCompleteEventArgs e)
{
try
{
reportViewerSales.PageSetupDailog();
reportViewerSales.PrintDialog();
reportViewerSales.Clear();
reportViewerSales.LocalReport.ReleaseSandboxAppDomain();
}
catch (Exception ex)
{
}
}