在运行时将参数传递给Crystal报表不起作用

时间:2018-08-10 13:39:30

标签: asp.net crystal-reports

我整天都在尝试解决问题,但是无法解决。我有一个水晶报表,我想在运行时传递参数,但仍然继续提示输入参数。下面是我的代码:

 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 个答案:

答案 0 :(得分:0)

我到处都在寻找解决问题的方法,但是没有帮助。经过大量尝试,我能够解决此问题。这是我的发现:

  1. 请勿调用CrystalReportViewer.RefreshReport()。这将刷新报告,并导致报告清除所有已传递的参数。

  2. 加载报告后调用CrystalReport.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);        

}

我希望这将帮助很多与我有同样问题的人。如果有帮助,请记住投票作为答案。