在运行时将参数传递给晶体报告不起作用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在运行时将参数传递给晶体报告不起作用相关的知识,希望对你有一定的参考价值。

我一整天都试图解决这个问题,但无法使其发挥作用。我有一个水晶报告,我想在运行时传递参数但仍然继续提示参数。以下是我的代码:

 public void LoadReport()
    {
        string studenNo = "A170034511";
        ReportDocument cryRpt = new ReportDocument();
        string reportName = "StdReport";
        cryRpt.Load(Server.MapPath("~/crystalRpts/" + reportName + ".rpt"));

        ParameterFields parameterFields = new ParameterFields();

        //First Parameter
        var parameterField1 = new ParameterField();
        var parameterDiscreteValue1 = new ParameterDiscreteValue();
        parameterField1.ParameterFieldName = "StudentNo";
        parameterDiscreteValue1.Value = studenNo;
        parameterField1.CurrentValues.Add(parameterDiscreteValue1);
        parameterFields.Add(parameterField1);


        //second Parameter
        var parameterField2 = new ParameterField();
        var parameterDiscreteValue2 = new ParameterDiscreteValue();
        parameterField2.ParameterFieldName = "Year";
        parameterDiscreteValue2.Value = "2017";
        parameterField2.CurrentValues.Add(parameterDiscreteValue2);
        parameterFields.Add(parameterField2);


        rptViewer.ParameterFieldInfo = parameterFields;

        rptViewer.ReportSource = cryRpt;
        rptViewer.RefreshReport();

    }

有了这些参数窗口仍然显示。我究竟做错了什么。

答案

我到处寻找解决我的问题但没有任何帮助。经过多次尝试,我能够解决问题。以下是我的发现:

  1. 不要调用CrystalReportViewer.RefreshReport()。这会刷新报告并导致报告清除已传递的所有参数。
  2. 加载报告后调用Crystal Report.Refresh()
  3. 设置CrystalReportViewer报告源后添加参数。

以下是适用于我的整个项目的最终代码,包含100多个报告:

public void LoadReport()
{
    string studenNo = "A170034511";
    ReportDocument cryRpt = new ReportDocument();
    string reportName = "StdReport";
    cryRpt.Load(Server.MapPath("~/crystalRpts/" + reportName + ".rpt"));

    cryRpt.Refresh();
    rptViewer.ReportSource = cryRpt;

    ParameterFields parameterFields = new ParameterFields();

    //First Parameter
    var parameterField1 = new ParameterField();
    var parameterDiscreteValue1 = new ParameterDiscreteValue();
    parameterField1.ParameterFieldName = "StudentNo";
    parameterDiscreteValue1.Value = studenNo;
    parameterField1.CurrentValues.Add(parameterDiscreteValue1);
    parameterFields.Add(parameterField1);


    //second Parameter
    var parameterField2 = new ParameterField();
    var parameterDiscreteValue2 = new ParameterDiscreteValue();
    parameterField2.ParameterFieldName = "Year";
    parameterDiscreteValue2.Value = "2017";
    parameterField2.CurrentValues.Add(parameterDiscreteValue2);
    parameterFields.Add(parameterField2);

    rptViewer.ParameterFieldInfo = parameterFields;

    rptViewer.HasCrystalLogo = false;
    rptViewer.Zoom(100);        

}

我希望这能帮助很多人和我一样有同样的问题。如果有帮助,请记得投票给答案。

以上是关于在运行时将参数传递给晶体报告不起作用的主要内容,如果未能解决你的问题,请参考以下文章

将参数传递给可执行文件在 C++ 中不起作用

将参数传递给 symfony 5.4 表单测试不起作用

如何在 h:inputText 中将参数传递给 f:ajax? f:参数不起作用

从 boost 线程在主线程上运行一个函数并将参数传递给该函数

当我将可选参数传递给视图时,为啥我的 CSS 静态文件在 Django 中不起作用?

Struts2:将参数传递给动作类不起作用