これが私の最初の質問です。
私はVS Community 2015とEntity Framework 6のMVC 5プロジェクトを使用しています。データモデリングにはコードファーストマイグレーションを使用しています。
私はすでに、それぞれのビューを使用したレポートを持っています。各ビューは、HTML5 Webページとしてのレポートの表示にC#モデルを使用します。
出力をPDF、Word、Excelに送信する必要があります...そのためにRDLCを使用しますが、オブジェクトモデルをデータセットとして設定する方法がわかりません。アイデアは、すでにビューを使用してレポートを作成するのと同じオブジェクトを送信することです。レポートのデータは違います。
アイデアや提案、チュートリアルはありますか?
私はRDLCに非常に慣れていないため、データセットを使用したことがありません。
ありがとう
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");
}
ReportViewerを使用する必要があります。これは、任意のテーブルまたはストアドプロシージャからレポートを生成するためのウォークスルーです。ただし、Visual Studio 2017以降、デフォルトではReportViewerツールはありません。したがって、レポートを生成するには、最初にいくつかの設定を行う必要があります。
レポートデザイナー:
Tools> Extensions and Updatesに移動します。次に、ダウンロードしてインストールしますMicrosoft Rdlc Report Designer for Visual Studio。
ReportViewerコントロール:
パッケージマネージャーコンソールを開き、次を実行します:install-package Microsoft.ReportingServices.ReportViewerControl.WebForms。
デフォルトの「ReportViewerWebForm.aspx」がルートの場所に追加されます。 ScriptManagerとReportViewerが含まれていることを確認します。そうでない場合は、ツールボックスから追加するか、これをコピーして貼り付けます。
_<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>
_
次に、DataSetを作成して、DataSourceとしてレポートに提供する必要があります。したがって、新しいDataSet(.xsdファイル)を追加します。そのデータセットでは、テーブルとストアドプロシージャの両方を使用できます。サーバーエクスプローラを開き、データソース(テーブルまたはストアドプロシージャ)をドラッグアンドドロップするだけです。
レポートを生成:
次に、次のようにデフォルトの「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として返すサービス関数です。
お役に立てば幸いです。