2013-07-18 4 views
12

У меня есть приложение, в котором я должен распечатать отчет RDLC, не показывая printDialog и используя указанный по умолчанию принтер, определенный в приложении. Ниже приведена моя тестовая версия кода.Как напрямую распечатать отчет rdlc без отображения PrintDialog() в C#?

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

А вот мой Rendering полного метода

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

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

ответ

12

Я просто дал быстрый взгляд на класс, я создал для прямой печати, и я думаю, что я взял некоторые идеи из этого руководства: Printing a Local Report without Preview

+0

@tezzo Но это печать на стороне клиента? – Neo

+1

Да, Microsoft.Reporting.WinForms.ReportViewer и .LocalReport. – tezzo

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

Добро пожаловать в Stackoverflow! Хотя этот код может ответить на вопрос, предоставляя дополнительный контекст относительно того, почему и/или как этот код отвечает на вопрос, улучшает его долгосрочную ценность. Вы также должны использовать форматирование кода, когда код внутри ответа. – Max

4

Я сделал класс расширения для ответа @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. Может помочь кому-то

Смежные вопросы