web-dev-qa-db-ja.com

MVC 5 rdlcレポートでオブジェクトを使用する方法

これが私の最初の質問です。

私はVS Community 2015とEntity Framework 6のMVC 5プロジェクトを使用しています。データモデリングにはコードファーストマイグレーションを使用しています。

私はすでに、それぞれのビューを使用したレポートを持っています。各ビューは、HTML5 Webページとしてのレポートの表示にC#モデルを使用します。

出力をPDF、Word、Excelに送信する必要があります...そのためにRDLCを使用しますが、オブジェクトモデルをデータセットとして設定する方法がわかりません。アイデアは、すでにビューを使用してレポートを作成するのと同じオブジェクトを送信することです。レポートのデータは違います。

アイデアや提案、チュートリアルはありますか?

私はRDLCに非常に慣れていないため、データセットを使用したことがありません。

ありがとう

8

ReportViewerオブジェクトを使用して、RDLCをPDFまたはHTMLにレンダリングできます。以下のケースでは、PDFドキュメントが必要でしたが、それをFileContentResult ActionResultとして返しました。ダウンロードとして返したい場合は、File ActionResultを使用します(使用するためにコメントアウトしました)。

public ActionResult GetPackingSlipPDF(int shipmentId)
    {
        var shipment = _inboundShipmentService.GetInboundShipmentById(shipmentId);

        Warning[] warnings;
        string mimeType;
        string[] streamids;
        string encoding;
        string filenameExtension;

        var viewer = new ReportViewer();
        viewer.LocalReport.ReportPath = @"Labels\PackingSlip.rdlc";

        var shipLabel = new ShippingLabel { ShipmentId = shipment.FBAShipmentId, Barcode = GetBarcode(shipment.FBAShipmentId) };

        viewer.LocalReport.DataSources.Add(new ReportDataSource("ShippingLabel", new List<ShippingLabel> { shipLabel }));
        viewer.LocalReport.Refresh();

        var bytes = viewer.LocalReport.Render("PDF", null, out mimeType, out encoding, out filenameExtension, out streamids, out warnings);

        return new FileContentResult(bytes, mimeType);

        //return File(bytes, mimeType, shipment.FBAShipmentId + "_PackingSlip.pdf");
    }

ASP.NET MVCでRDLCレポートをHTMLでレンダリングする

6
malbarmawi

ReportViewerを使用する必要があります。これは、任意のテーブルまたはストアドプロシージャからレポートを生成するためのウォークスルーです。ただし、Visual Studio 2017以降、デフォルトではReportViewerツールはありません。したがって、レポートを生成するには、最初にいくつかの設定を行う必要があります。

  1. レポートデザイナー:
    Tools> Extensions and Updatesに移動します。次に、ダウンロードしてインストールしますMicrosoft Rdlc Report Designer for Visual Studio

  2. ReportViewerコントロール:
    パッケージマネージャーコンソールを開き、次を実行します:install-package Microsoft.ReportingServices.ReportViewerControl.WebForms

  3. ReportViewerコントロールをツールボックスに追加します。
    ToolBoxから[General]を右クリックして、[Choose Items]を選択します。ロードが完了したら、[参照]をクリックしてプロジェクトフォルダーに移動します(レポートビューアーdllはプロジェクトのパッケージフォルダーにあります)。 Microsoft.ReportingServices.ReportViewerControl.WebForms\lib\net4フォルダーに移動してWebForms.dllを追加します。
  4. 午後のコンソールから実行:install-package ReportViewerForMvc
  5. デフォルトの「ReportViewerWebForm.aspx」がルートの場所に追加されます。 ScriptManagerReportViewerが含まれていることを確認します。そうでない場合は、ツールボックスから追加するか、これをコピーして貼り付けます。

    _<asp:ScriptManager ID="ScriptManager1" runat="server">
            <Scripts>
                <asp:ScriptReference Assembly="ReportViewerForMvc" Name="ReportViewerForMvc.Scripts.PostMessage.js" />
            </Scripts>
    </asp:ScriptManager>
    <rsweb:ReportViewer ID="ReportViewer1" runat="server"></rsweb:ReportViewer>  
    _
  6. 次に、DataSetを作成して、DataSourceとしてレポートに提供する必要があります。したがって、新しいDataSet(.xsdファイル)を追加します。そのデータセットでは、テーブルとストアドプロシージャの両方を使用できます。サーバーエクスプローラを開き、データソース(テーブルまたはストアドプロシージャ)をドラッグアンドドロップするだけです。

  7. レポートをデザインする:
    新しい.rdlcファイルを追加し、[表示]> [レポートデータ]パネルに移動して新しいデータソースを追加し(その.xsdファイルを選択)、その.xsdファイルからどのソースを使用するかを選択します。そのレポート。
  8. レポートを生成:
    次に、次のようにデフォルトの「ReportViewerWebForm.aspx」を呼び出します。
    発信者コントローラから:

    _var reportViewer = new ReportViewer();
    reportViewer.LocalReport.ReportPath =                         
    Server.MapPath("~/Reports/Reception/PatientMoneyReceipt.rdlc");
    reportViewer.LocalReport.DataSources.Clear();
    reportViewer.LocalReport.DataSources.Add(new ReportDataSource("ReportDataSet",
        _createEntryService.GetMoneyReceiptReport(model.Patient.PatientId)));
    reportViewer.LocalReport.Refresh();
    reportViewer.ProcessingMode = ProcessingMode.Local;
    reportViewer.AsyncRendering = false;
    reportViewer.SizeToReportContent = true;
    reportViewer.ZoomMode = ZoomMode.FullPage;
    
    ViewBag.ReportViewer = reportViewer;
    return View();  
    _

    呼び出し元ビュー(cshtmlファイル)から:

    _@using ReportViewerForMvc
    ...
    @Html.ReportViewer(ViewBag.ReportViewer as Microsoft.Reporting.WebForms.ReportViewer)  
    _

    この行で

    _reportViewer.LocalReport.DataSources.Add(new ReportDataSource("ReportDataSet",    _createEntryService.GetMoneyReceiptReport(model.Patient.PatientId)));  
    _

    ReportDataSetは.rdlcファイルを構成するときに使用されるデータセット名であり、_createEntryService.GetMoneyReceiptReport(model.Patient.PatientId))はストアドプロシージャを呼び出してそれをDataTableとして返すサービス関数です。

お役に立てば幸いです。

4
Wahid Masud