我想为我的客户提供一个报告解决方案,该解决方案使用许多带有参数的 Crystal Reports。目前,他们的解决方案使用提示用户输入每个参数的默认机制 - 这很乏味,并且不提供验证(例如日期输入的正确格式等)。
我宁愿展示一个接受报告的页面,并评估报告所需的参数,然后动态构建一个包含每个参数字段的页面,供用户输入,然后单击运行按钮以编程方式传递报告参数的所有输入值。
我没有通过 Google 搜索找到任何东西。这已经完成了吗?我不想在这个上重新发明轮子。任何指导将不胜感激。
我想为我的客户提供一个报告解决方案,该解决方案使用许多带有参数的 Crystal Reports。目前,他们的解决方案使用提示用户输入每个参数的默认机制 - 这很乏味,并且不提供验证(例如日期输入的正确格式等)。
我宁愿展示一个接受报告的页面,并评估报告所需的参数,然后动态构建一个包含每个参数字段的页面,供用户输入,然后单击运行按钮以编程方式传递报告参数的所有输入值。
我没有通过 Google 搜索找到任何东西。这已经完成了吗?我不想在这个上重新发明轮子。任何指导将不胜感激。
原来用 asp.Net MVC 这实际上是相当微不足道的......控制器:
public PartialViewResult ReportParameters(string reportFileName)
{
string path = Path.Combine(System.Configuration.ConfigurationManager.AppSettings["CustomReportPath"], reportFileName);
ReportDocument oReport = new ReportDocument();
oReport.Load(path);
ViewBag.ReportFileName = reportFileName;
ViewData.Model = oReport;
return PartialView();
}
剃刀视图:
@model CrystalDecisions.CrystalReports.Engine.ReportDocument
<h2>Report: @Model.SummaryInfo.ReportTitle</h2>
@using (Html.BeginForm("PrintCustomReport", "Reporting", FormMethod.Post, new { target = "_blank" }))
{
<input type="hidden" name="ReportFileName" value="@ViewBag.ReportFileName" />
<fieldset>
<legend>Enter Parameters for Report</legend>
@{
foreach (CrystalDecisions.CrystalReports.Engine.ParameterFieldDefinition oParam in Model.DataDefinition.ParameterFields)
{
<text>
<div class="editor-label">
@Html.Label(oParam.PromptText)
</div>
</text>
switch (oParam.ParameterValueKind)
{
case CrystalDecisions.Shared.ParameterValueKind.BooleanParameter:
<div class="editor-field">
@Html.CheckBox(oParam.Name)
</div>
break;
case CrystalDecisions.Shared.ParameterValueKind.CurrencyParameter:
<div class="editor-field">
@Html.Kendo().NumericTextBox().Name(oParam.Name).Format("c")
</div>
break;
case CrystalDecisions.Shared.ParameterValueKind.DateParameter:
<div class="editor-field">
@Html.Kendo().DatePicker().Name(oParam.Name)
</div>
break;
case CrystalDecisions.Shared.ParameterValueKind.DateTimeParameter:
<div class="editor-field">
@Html.Kendo().DateTimePicker().Name(oParam.Name)
</div>
break;
case CrystalDecisions.Shared.ParameterValueKind.NumberParameter:
<div class="editor-field">
@Html.Kendo().NumericTextBox().Name(oParam.Name)
</div>
break;
case CrystalDecisions.Shared.ParameterValueKind.StringParameter:
<div class="editor-field">
@Html.TextBox(oParam.Name, oParam.HasCurrentValue ? oParam.CurrentValues[0].Description : "")
</div>
break;
case CrystalDecisions.Shared.ParameterValueKind.TimeParameter:
<div class="editor-field">
@Html.Kendo().TimePicker().Name(oParam.Name)
</div>
break;
default:
break;
}
}
}
</fieldset>
<input class="k-button" onclick="CloseWindow()" type="submit" value="Print" />
<input class="k-button" onclick="CloseWindow()" type="button" value="Cancel" />
}
然后提交按钮将发布到控制器上的 PrintCustomReport 方法,该方法返回 PdfReportResult,如@RenanMarks所述