rdlc转换成html,在ASP.NET MVC中以HTML格式呈现RDLC报表

在解决方案中创建一个文件夹并命名为Reports。

添加一个ASP.Net Web表单并将其命名为ReportView.aspx

创建一个类ReportData并将其添加到Reports文件夹中。添加以下代码

到了班级。

public class ReportData

{

public ReportData()

{

this.ReportParameters = new List();

this.DataParameters = new List();

}

public bool IsLocal { get; set; }

public string ReportName { get; set; }

public List ReportParameters { get; set; }

public List DataParameters { get; set; }

}

public class Parameter

{

public string ParameterName { get; set; }

public string Value { get; set; }

}

添加另一个类并将其命名为ReportBasePage.cs。在此类中添加以下代码。

public class ReportBasePage : System.Web.UI.Page

{

protected ReportData ReportDataObj { get; set; }

protected override void OnInit(EventArgs e)

{

base.OnInit(e);

if (HttpContext.Current != null)

if (HttpContext.Current.Session["ReportData"] != null)

{

ReportDataObj = HttpContext.Current.Session["ReportData"] as ReportData;

return;

}

ReportDataObj = new ReportData();

CaptureRouteData(Page.Request);

}

private void CaptureRouteData(HttpRequest request)

{

var mode = (request.QueryString["rptmode"] + "").Trim();

ReportDataObj.IsLocal = mode == "local" ? true : false;

ReportDataObj.ReportName = request.QueryString["reportname"] + "";

string dquerystr = request.QueryString["parameters"] + "";

if (!String.IsNullOrEmpty(dquerystr.Trim()))

{

var param1 = dquerystr.Split(',');

foreach (string pm in param1)

{

var rp = new Parameter();

var kd = pm.Split('=');

if (kd[0].Substring(0, 2) == "rp")

{

rp.ParameterName = kd[0].Replace("rp", "");

if (kd.Length > 1) rp.Value = kd[1];

ReportDataObj.ReportParameters.Add(rp);

}

else if (kd[0].Substring(0, 2) == "dp")

{

rp.ParameterName = kd[0].Replace("dp", "");

if (kd.Length > 1) rp.Value = kd[1];

ReportDataObj.DataParameters.Add(rp);

}

}

}

}

}

将ScriptManager添加到ReportView.aspx页面。现在将报告查看器带到页面。在报表查看器中,设置属性AsyncRendering =“false”。代码如下。

Width="1271px" Height="1000px" >

在ReportView.aspx.cs中添加两个NameSpace

using Microsoft.Reporting.WebForms;

using System.IO;

将System.Web.UI.Page更改为ReportBasePage。只需使用以下代码替换您的代码。

public partial class ReportView : ReportBasePage

{

protected void Page_Load(object sender, EventArgs e)

{

if (!IsPostBack)

{

RenderReportModels(this.ReportDataObj);

}

}

private void RenderReportModels(ReportData reportData)

{

RASolarERPData dal = new RASolarERPData();

List objClosingInventory = new List();

// Reset report properties.

ReportViewerRSFReports.Height = Unit.Parse("100%");

ReportViewerRSFReports.Width = Unit.Parse("100%");

ReportViewerRSFReports.CssClass = "table";

// Clear out any previous datasources.

this.ReportViewerRSFReports.LocalReport.DataSources.Clear();

// Set report mode for local processing.

ReportViewerRSFReports.ProcessingMode = ProcessingMode.Local;

// Validate report source.

var rptPath = Server.MapPath(@"./Report/" + reportData.ReportName +".rdlc");

//@"E:\RSFERP_SourceCode\RASolarERP\RASolarERP\Reports\Report\" + reportData.ReportName + ".rdlc";

//Server.MapPath(@"./Report/ClosingInventory.rdlc");

if (!File.Exists(rptPath))

return;

// Set report path.

this.ReportViewerRSFReports.LocalReport.ReportPath = rptPath;

// Set report parameters.

var rpPms = ReportViewerRSFReports.LocalReport.GetParameters();

foreach (var rpm in rpPms)

{

var p = reportData.ReportParameters.SingleOrDefault(o => o.ParameterName.ToLower() == rpm.Name.ToLower());

if (p != null)

{

ReportParameter rp = new ReportParameter(rpm.Name, p.Value);

ReportViewerRSFReports.LocalReport.SetParameters(rp);

}

}

//Set data paramater for report SP execution

objClosingInventory = dal.ClosingInventoryReport(this.ReportDataObj.DataParameters[0].Value);

// Load the dataSource.

var dsmems = ReportViewerRSFReports.LocalReport.GetDataSourceNames();

ReportViewerRSFReports.LocalReport.DataSources.Add(new ReportDataSource(dsmems[0], objClosingInventory));

// Refresh the ReportViewer.

ReportViewerRSFReports.LocalReport.Refresh();

}

}

将文件夹添加到Reports文件夹并将其命名为Report。现在将RDLC报告添加到Reports / Report文件夹并将其命名为ClosingInventory.rdlc。

现在添加一个Controller并将其命名为ReportController。在控制器中添加以下操作方法。

public ActionResult ReportViewer()

{

ViewData["reportUrl"] = "../Reports/View/local/ClosingInventory/";

return View();

}

添加视图页面,单击ReportViewer Controller。将视图命名为ReportViewer.cshtml。将以下代码添加到视图页面。

@using (Html.BeginForm("Login"))

{

@Html.DropDownList("ddlYearMonthFormat", new SelectList(ViewBag.YearMonthFormat, "YearMonthValue", "YearMonthName"), new { @class = "DropDown" })

Stock In Transit: @Html.TextBox("txtStockInTransit", "", new { @class = "LogInTextBox" })

value="Show Report" />

}

添加iframe。如下设置Iframe的属性

frameborder="0" width="1000"; height="1000"; style="overflow:hidden;" scrolling="no"

将以下JavaScript添加到查看器中。

function ReportValidationCheck() {

var url = $('#hdUrl').val();

var yearmonth = $('#ddlYearMonthFormat').val();

var stockInTransit = $('#txtStockInTransit').val()

if (stockInTransit == "") {

stockInTransit = 0;

}

if (yearmonth == "0") {

alert("Please Select Month Correctly.");

}

else {

//url = url + "dpSpYearMonth=" + yearmonth + ",rpYearMonth=" + yearmonth + ",rpStockInTransit=" + stockInTransit;

url = "../Reports/ReportView.aspx?rptmode=local&reportname=ClosingInventory&parameters=dpSpYearMonth=" + yearmonth + ",rpYearMonth=" + yearmonth + ",rpStockInTransit=" + stockInTransit;

var myframe = document.getElementById("ifrmReportViewer");

if (myframe !== null) {

if (myframe.src) {

myframe.src = url;

}

else if (myframe.contentWindow !== null && myframe.contentWindow.location !== null) {

myframe.contentWindow.location = url;

}

else { myframe.setAttribute('src', url); }

}

}

return false;

}

在Web.config文件中,将以下键添加到appSettings部分添加

key="UnobtrusiveJavaScriptEnabled" value="true"

在system.web处理程序部分添加以下项

添加verb="*" path="Reserved.ReportViewerWebControl.axd" type = "Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"

将您的数据源更改为您自己的数据源。这个解决方案非常简单,我想每个人都喜欢它。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值