2013-07-18 449 views
12

私はRDLCレポートを印刷しなければならないアプリケーションを持っています。これは、printDialogを表示せずに、アプリケーションで定義されたデフォルトの指定されたプリンタを使用することです。以下は私のテスト実装コードです。私はちょうど私が直接印刷するために作成したクラスへの迅速な表情を与えたC#でPrintDialog()を表示せずにrdlcレポートを直接印刷する方法は?

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

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

答えて

12

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

そして、ここでは私は完全なメソッドをレンダリングしていると私はこのチュートリアルからいくつかのアイデアを取ったと思う: 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 answerに拡張クラスを作成しました。より簡単になるかもしれません。

このGist Hereを使用して、私が書いた拡張クラスを取得してください。それをプロジェクトに組み込みます。 GET名前空間のためにありません:D

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

PrintToPrinter方法はLocalReportに利用できるようになります。誰かを助けるかもしれない

関連する問題