0

パラメータ付きの多数の Crystal Reports を使用するレポート ソリューションをクライアントに提供したいと考えています。現在、彼らのソリューションは、各パラメーターについてユーザーにプロンプ​​トを表示するデフォルトのメカニズムを使用しています。これは面倒であり、検証を提供しません (日付入力の正しい形式など)。

レポートを受け入れ、レポートに必要なパラメーターを評価し、各パラメーターのフィールドを含むページを動的に構築して、ユーザーが入力し、実行ボタンをクリックしてプログラムで渡すページを提示したいと思います入力されたすべての値をレポート パラメータに追加します。

Google 検索で何も見つかりません。これは行われましたか?私はこれで車輪を再発明したくありません。任意のガイダンスをいただければ幸いです。

4

1 に答える 1

0

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メソッドに投稿します。これにより、@ RenanMarksで説明されているように、PdfReportResultが返されます。

于 2012-12-18T05:29:29.227 に答える