如何在ASP.Net MVC中将RDLC报告与ReportViewer Control一起使用?
我是ASP.Net MVC的新手。 我需要在MVC中显示基于RDLC的报告。
基本上我的要求以及我所做的是: –
我有一个inheritanceAPIController的ReportController,它有一个返回DataSet的方法。 此DataSet正被发送到RDLC文件。
为此,我已完成以下操作,但无法使报告生效。
我创建了一个名为ReportParameter的模型类,如下所示:
public class ReportParameter { public DateTime DateFrom { get; set; } public DateTime DateTo { get; set; } }
我有以下控制器ReportViewController:
public class ReportViewController : Controller { static readonly ReportController ctrl = new ReportController(); public ActionResult GenerateReport() { return View(); } [HttpPost] public ActionResult GenerateReport(ReportParameterSalesOrder param) { if (ModelState.IsValid) { Helpers.DataLayer dl = new Helpers.DataLayer(); if (param.DateFrom != null) { DateTime DateFrom = Convert.ToDateTime(param.DateFrom); DateTime DateTo = Convert.ToDateTime(param.DateTo); string fdate = DateFrom.ToString("yyyy/MM/dd"); string tdate = DateTo.ToString("yyyy/MM/dd"); Session["ReportSales"] = ctrl.ReportSales(param); } return Redirect(Url.Action("ViewReport", "ReportView")); } return View(); } public ActionResult ViewReport() { return View(); } }
我有一个API Controller ReportController,其对象已在上面的ReportViewerController中创建,以生成DataSet并填充RDLC报告。 API控制器是:
public class ReportController : ApiController { static readonly IReportRepository repository = new ReportRepository(); [ActionName("ReportSales")] public DataSet ReportSales(ReportParameterSalesOrder paramSO) { DataSet item = repository.ReportSales(paramSO); if (item == null) { throw new HttpResponseException(HttpStatusCode.NotFound); } return item; } }
我有两个视图GenerateReport.aspx和ViewReport.aspx。 GenerateReport.aspx如下:
a.DateFrom, new{id="startDate",style="width:250px;"}) %> a.DateFrom)%>
a.DateTo, new { id = "ToDate", style = "width: 250px;" })%> a.DateTo)%>
ViewReport.aspx如下:
我添加了一个Dataset.xsd,一个rdlc文件和一个aspx页面来添加rdlc文件。
但我不能让它发挥作用。 如何显示报告,或如何将从Controller收到的数据集填充到报告中?
背景
(我知道你知道这一点,但对于未来的读者;-)
详细地
用于在MVC视图上的iframe
呈现ReportViewer控件的ViewReport.aspx
页面将需要是一个很好的老式asp.Net Web表单。
对于小型数据集,您可以在MVC控制器中获取报表数据,然后在Session
中将其传递给WebForm。
但是,对于较大的数据集,我建议您将参数传递给Session中的WebForm(或者甚至通过QueryString
,如果它们不敏感),然后后面的WebForm代码需要获取数据集并将其绑定到ReportViewer。
在MVC方面,在MyController
参数的post中:
[HttpPost] public ActionResult GenerateReport(string param1, int param2) { // Obviously you apply the parameters as predicates and hit the real database Session["ReportData"] = FakeDatabaseData; ViewBag.ShowIFrame = true; return View(); }
一旦用户在View, MyController/GenerateReport
上输入ReportParameters,您就可以显示IFrame:
然后将WebForms页面/OldSkoolAspx/ReportViewer.aspx
添加到MVC项目中。 在ReportViewer.aspx.cs
背后的代码中:
protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { var reportDataSource = new ReportDataSource { // Must match the DataSource in the RDLC Name = "SomeReportDataSet", Value = Session["ReportData"] }; ReportViewer1.LocalReport.DataSources.Add(reportDataSource); ReportViewer1.DataBind(); } }
在WebForms ReportViewer.aspx
前端,添加控件(建议使用工具箱,以便将所有必需的引用添加到web.config中):
这里有很多活动部件,所以我已经在这里向GitHub上传了一个演示项目
请注意,相同的技术也适用于Report Server生成的报告(即使用带有.RDL报告的ReportViewer)。 但请注意,RDLC和RDL都可以是真正的SessionState
hog
上述就是C#学习教程:如何在ASP.Net MVC中将RDLC报告与ReportViewer Control一起使用?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/997748.html