如何在asp.net mvc中添加报表参数

时间:2014-01-29 08:13:53

标签: c# asp.net asp.net-mvc asp.net-mvc-3 razor

我在报告中添加了两个名为dtStartDate和dtEndDate的参数。我试图弄清楚如何在控制器上实现。目前,在尝试设置参数时会抛出错误。请指教,谢谢

以下是我到目前为止的代码:

public ActionResult DetailsReport()
{

    LocalReport localReport = new LocalReport();
    localReport.ReportPath = Server.MapPath("~/Content/Reports/Data.rdlc");

    ReportParameter param0 = new ReportParameter("dtStartDate", "2014-01-28");
    ReportParameter param1 = new ReportParameter("dtStartEnd", "2014-01-30");

    localReport.SetParameters(new ReportParameter[] { param0, param1 });
    ReportDataSource reportDataSource = new ReportDataSource("dsData", GetAllData());

    localReport.DataSources.Add(reportDataSource);
    string reportType = "PDF";
    string mimeType;
    string encoding;
    string fileNameExtension;

    //The DeviceInfo settings should be changed based on the reportType
    string deviceInfo =
    "<DeviceInfo>" +
    "  <OutputFormat>PDF</OutputFormat>" +
    "  <PageWidth>8.5in</PageWidth>" +
    "  <PageHeight>11in</PageHeight>" +
    "  <MarginTop>0.5in</MarginTop>" +
    "  <MarginLeft>1in</MarginLeft>" +
    "  <MarginRight>1in</MarginRight>" +
    "  <MarginBottom>0.5in</MarginBottom>" +
    "</DeviceInfo>";

    Warning[] warnings;
    string[] streams;
    byte[] renderedBytes;

    //Render the report
    renderedBytes = localReport.Render(
        reportType,
        deviceInfo,
        out mimeType,
        out encoding,
        out fileNameExtension,
        out streams,
        out warnings);
    Response.AddHeader("content-disposition", "attachment; filename=Data." + fileNameExtension);
    return File(renderedBytes, mimeType);


}

public static List<vwDataReport> GetAllData()
{
    var entities = new DataEntities();
    var x = from c in entities.vwDataReport
            select c;
    return x.ToList();
}

1 个答案:

答案 0 :(得分:1)

使用两个日期创建一个ViewModel,即

public class ReportModel
{
   public DateTime StartDate { get; set; }
   public DateTime StartEnd { get; set; }
}

在Get方法中初始化并发送回来,这将呈现日期选择屏幕,即

public ActionResult DetailsReport()
{
     var model = new ReportModel();
     model.StartDate = DateTime.Now;
     model.StartEnd = DateTime.Now;
     return View(model);
}

在视图中渲染控件以显示它们,即如果您使用类似这样的jQuery UI:

@model ReportModel

@using(Html.BeginForm()){
@Html.TextBoxFor(m => m.StartDate, String.Format("{0:dd/M/yy}", Model.StartDate),
  new { @class = "datepicker datepicker-init" })

@Html.TextBoxFor(m => m.StartEnd, String.Format("{0:dd/M/yy}", Model.StartEnd),
  new { @class = "datepicker datepicker-init" })
<input type="submit" value="submit" />
}

<script src="~/Scripts/jquery-1.8.2.js"></script>
<script src="~/Scripts/jquery-ui-1.10.3.js"></script>
<script type="text/javascript">
        $(".datepicker").datepicker({
            minDate: 0,
            dateFormat: 'dd/mm/y'
        });

</script>

使用以下签名创建一个帖子操作,该签名将使模型返回所选日期,然后填写您的报告处理代码,其中......即:。

[HttpPost]
public ActionResult DetailsReport(ReportModel model)
{
    ...
    var startDate = model.StartDate.ToString();
    var startEnd = model.StartEnd.ToString();
    ReportParameter param0 = new ReportParameter("dtStartDate", startDate);
    ReportParameter param1 = new ReportParameter("dtStartEnd", startEnd);
    ...
}