Передача параметра в отчет crystal во время выполнения не работает

Я весь день пытался решить эту проблему, но не мог заставить ее работать. У меня есть отчет о кристалле, что я хочу передать параметр во время выполнения, но все же продолжаю запрашивать параметры. Ниже мой код:

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

    }

При этом окно параметров все еще отображается. Что я делаю не так.

У параметров есть то же имя и в Crystal Report?

JulyOrdinary 10.08.2018 16:10
0
1
75
1

Ответы 1

Я везде искал решение своей проблемы, но без посторонней помощи. После множества попыток мне удалось решить проблему. Вот мои выводы:

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

}

Я надеюсь, что это поможет многим людям, столкнувшимся с той же проблемой, что и моя. Не забудьте проголосовать за ответ, если это вам поможет.

Другие вопросы по теме