ASP.Net中的RDLC报告 - 如何从唯一ID生成报告?

时间:2018-04-14 17:47:16

标签: c# asp.net-mvc rdlc

我是ASP.Net MVC的初学者。我用2个模型(Reservations和ReservationDetails)和控制器和视图创建了一个应用程序。 我还制作了一份RDLC报告。

我在ReservationsController中添加了这段代码:

public ActionResult Reports(string ReportType)
{
    LocalReport localreport = new LocalReport();
    localreport.ReportPath = Server.MapPath("~/Reports/Report_Reservatie.rdlc");

    ReportDataSource reportDataSource = new ReportDataSource();
    reportDataSource.Name = "DataSet_Reservaties";
    reportDataSource.Value = storeDB.Reservaties.ToList();

    localreport.DataSources.Add(reportDataSource);

    string reportType = ReportType;
    string mimeType;
    string encoding;
    string fileNameExtension;

    if (reportType == "PDF")
    {
        fileNameExtension = "pdf";
    }
    else
    {
        fileNameExtension = "jpg";
    }
    string[] streams;
    Warning[] warnings;
    byte[] renderedByte;
    renderedByte = localreport.Render(reportType, "", out mimeType, out encoding, out fileNameExtension, out streams, out warnings);
    Response.AddHeader("content-disposition", "attachment:filename + reservaties_report." + fileNameExtension);
    return File(renderedByte, fileNameExtension);
}

这在我的观点中:

@Html.ActionLink("Export to PDF", "Reports", new { ReportType = "PDF" })

此代码有效,但pfd显示所有预订。

但是我希望在有人制作之后只看到预订信息的PDF。 (而不是所有预订的信息。)

将报告单独绑定到每个预订的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

如果注意事项没有看到您的ViewModel和其他详细信息,则控制器中的关键行似乎是:

reportDataSource.Value = storeDB.Reservaties.ToList();

几乎可以肯定是:

reportDataSource.Value = storeDB.Reservaties.FirstOrDefault(a => a.IDENTIFIER == reportId);

其中IDENTIFIER是选择单个报告所需的ID。从你的问题不清楚这是什么类型(int,string,Guid),但你应该知道。然后,您需要使用ViewModel将reportId从View传递到Controller,并使用ActionLink,例如:

@Html.ActionLink("Export to PDF", "Reports", "Reservations", new { ReportType = "PDF", reportId = "12345" }, null)

其中“12345”是相关报告的IDENTIFIER,应由您的ViewModel提供。

将控制器操作更改为:

public ActionResult Reports(string ReportType, string reportId)

(或int reportIdGuid reportId,具体取决于类型)将允许将参数传递给Controller并用于选择单个报告。

充满警告,没有看到更多的代码细节,你可以/应该为你的Controller添加更多的验证(以覆盖null或空参数和结果),但希望这应该让你在路径上。