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

问题描述 投票:0回答:1

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

 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();

    }

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

asp.net crystal-reports
1个回答
0
投票

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

  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);        

}

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

© www.soinside.com 2019 - 2024. All rights reserved.