параметры прохождения в кристалле

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

«неправильный параметр»

когда я передаю два параметра, мой код

 {
    ReportDocument reportDocument = new ReportDocument();
    ParameterField paramField = new ParameterField();
    ParameterFields paramFields = new ParameterFields();
    ParameterDiscreteValue paramDiscreteValue = new ParameterDiscreteValue();

    paramField.Name = "@Dept";
    paramDiscreteValue.Value = TextBox1.Text.ToString();
    paramField.CurrentValues.Add(paramDiscreteValue);
    paramFields.Add(paramField);

    paramField.Name = "@Name";
    paramDiscreteValue.Value = TextBox2.Text.ToString();
    paramField.CurrentValues.Add(paramDiscreteValue);
    paramFields.Add(paramField);

    CrystalReportViewer1.ParameterFieldInfo = paramFields;
    reportDocument.Load(Server.MapPath("CrystalReport.rpt"));
    CrystalReportViewer1.ReportSource = reportDocument;
    reportDocument.SetDatabaseLogon("sa", "sa", "OPWFMS-7KYGZ7SB", "test");

}

пожалуйста, дайте мне знать любые изменения

c#,crystal-reports,

6

Ответов: 5


7 ов

Вам нужно создать новый параметрField и значение для обоих параметров. Ваш текущий код добавляет параметр, изменяет его (меняет имя и значение) и снова добавляет тот же объект. Это должно быть правильно:

 {
ReportDocument reportDocument = new ReportDocument();

ParameterFields paramFields = new ParameterFields();
// ParameterDiscreteValue paramDiscreteValue = new ParameterDiscreteValue();

ParameterField paramField = new ParameterField();
ParameterDiscreteValue paramDiscreteValue = new ParameterDiscreteValue();
paramField.Name = "@Dept";
paramDiscreteValue.Value = TextBox1.Text.ToString();
paramField.CurrentValues.Add(paramDiscreteValue);
paramFields.Add(paramField);

paramField = new ParameterField(); // <-- This line is added
paramDiscreteValue = new ParameterDiscreteValue();  // <-- This line is added
paramField.Name = "@Name";
paramDiscreteValue.Value = TextBox2.Text.ToString();
paramField.CurrentValues.Add(paramDiscreteValue);
paramFields.Add(paramField);

CrystalReportViewer1.ParameterFieldInfo = paramFields;
reportDocument.Load(Server.MapPath("CrystalReport.rpt"));
CrystalReportViewer1.ReportSource = reportDocument;
reportDocument.SetDatabaseLogon("sa", "sa", "OPWFMS-7KYGZ7SB", "test");

}

EDIT: ошибка, упомянутая в комментарии, вероятно, потому, что в коде есть два определения переменной paramField или paramDiscreteValue. В одном методе c # вы не можете определить переменную с тем же именем более одного раза. Попробуйте код выше, поскольку он написан, и если вы все еще получаете ошибку компилятора, вставьте здесь полный текст ошибки.


4

Попробуйте это, это немного более кратким

{    
  ReportDocument reportDocument = new ReportDocument();

  reportDocument.Load(Server.MapPath("CrystalReport.rpt"));
  CrystalReportViewer1.ReportSource = reportDocument;
  reportDocument.SetParameterValue("@Dept", TextBox1.Text.ToString());    
  reportDocument.SetParameterValue("@Name", TextBox2.Text.ToString());

 // CrystalReportViewer1.ParameterFieldInfo = paramFields;

  reportDocument.SetDatabaseLogon("sa", "sa", "OPWFMS-7KYGZ7SB", "test");
}

2

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


2

Попробуйте создать параметр ParameterField перед каждым параметром, который вы добавляете в отчет:

paramField = new ParameterField();
paramDiscreteValue.Value = ...
...

0

Проблема может быть реплицирована с помощью Crystal Reports для Visual Studio 2005. Исправление для решения проблемы заключается в том, чтобы сначала настроить параметр ReportSource для CrystalReportViewer, а затем установить значения параметров. Таким образом, ваш код должен быть:

{
ReportDocument reportDocument = new ReportDocument();

CrystalReportViewer1.ReportSource = reportDocument;

ParameterField paramField = new ParameterField();
ParameterFields paramFields = new ParameterFields();
ParameterDiscreteValue paramDiscreteValue = new ParameterDiscreteValue();

paramField.Name = "@Dept";
paramDiscreteValue.Value = TextBox1.Text.ToString();
paramField.CurrentValues.Add(paramDiscreteValue);
paramFields.Add(paramField);

paramField.Name = "@Name";
paramDiscreteValue.Value = TextBox2.Text.ToString();
paramField.CurrentValues.Add(paramDiscreteValue);
paramFields.Add(paramField);

CrystalReportViewer1.ParameterFieldInfo = paramFields;
reportDocument.Load(Server.MapPath("CrystalReport.rpt"));
reportDocument.SetDatabaseLogon("sa", "sa", "OPWFMS-7KYGZ7SB", "test");
}
C #, кристалл-отчеты,
Похожие вопросы
Яндекс.Метрика