【问题标题】:Crystal Reports - Replace prompts with dynamically-generated web pageCrystal Reports - 用动态生成的网页替换提示
【发布时间】:2012-10-08 09:58:03
【问题描述】:

我想为我的客户提供一个报告解决方案,该解决方案使用多个带参数的 Crystal Reports。目前他们的解决方案使用提示用户输入每个参数的默认机制 - 这很乏味,并且不提供验证(例如日期输入的正确格式等)。

我更愿意展示一个接受报告的页面,并评估报告所需的参数,然后动态构建一个包含每个参数字段的页面,供用户输入,然后单击运行按钮以编程方式将所有输入的值传递给报告参数。

我没有通过 Google 搜索找到任何内容。这已经完成了吗?我不想在这个上重新发明轮子。任何指导将不胜感激。

【问题讨论】:

  • 你已经在重新发明轮子了。
  • @craig...你能给我指出你所指的车轮的现有实现吗?
  • cr2008 附带的 CrystalReportViewer 服务器控件已经在单个页面中提示所有参数。我想您使用的是旧版本?

标签: crystal-reports


【解决方案1】:

原来用 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 here 所述

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多