web-dev-qa-db-ja.com

C#でPrintDialog()を表示せずにrdlcレポートを直接印刷する方法

PrintDialogを表示せずに、アプリケーションで定義されているデフォルトの指定されたプリンターを使用せずにRDLCレポートを印刷する必要があるアプリケーションがあります。以下は私のテスト実装コードです。

    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)
        {
        }
    }
13
Redone

直接印刷するために作成したクラスをざっと見て、このウォークスルーからいくつかのアイデアを取り入れたと思います。 プレビューなしでローカルレポートを印刷する

12
tezzo

@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で利用できるようになります。誰かを助けるかもしれない

11
shakee93