6 votes

Transmettre des paramètres dans un rapport Crystal

Je crée un rapport Crystal à partir d'une procédure stockée, cela fonctionne bien quand je passe un paramètre mais cela montre une erreur

"Paramètre incorrect"

quand je passe deux paramètres mon code est

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

}

veuillez me faire savoir s'il y a des modifications

9voto

zendar Points 7085

Vous devez créer un nouveau paramètreField et une nouvelle valeur pour les deux paramètres. Votre code actuel ajoute un paramètre, le modifie (change le nom et la valeur) et ajoute à nouveau le même objet. Ceci devrait être correct :

 {
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(); // <-- Cette ligne est ajoutée
paramDiscreteValue = new ParameterDiscreteValue();  // <-- Cette ligne est ajoutée
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: L'erreur mentionnée dans le commentaire est probablement due à la présence de deux définitions de la variable paramField ou paramDiscreteValue dans le code. Dans une méthode en C#, vous ne pouvez pas définir une variable avec le même nom plus d'une fois. Essayez le code tel qu'il est écrit et si vous obtenez toujours une erreur de compilation, veuillez copier ici le texte complet de l'erreur.

5voto

John Hunter Points 2204

Essayez ceci, c'est un peu plus concis

{    
  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");
}

2voto

Darth Continent Points 1482

Assurez-vous que les données réelles passées en paramètres ne sont pas converties implicitement en un mauvais type de données. Par exemple, si vous passez un ID numérique pour le paramètre @Dept, assurez-vous que le type de données du paramètre d'entrée qui s'attend à recevoir la valeur est également de type numérique.

2voto

Nelson Reis Points 2889

Essayez de créer le ParameterField avant chaque paramètre que vous ajoutez au rapport :

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

0voto

Le problème peut être reproduit avec Crystal Reports pour Visual Studio 2005. Le correctif de contournement consiste à définir d'abord la propriété ReportSource du CrystalReportViewer, puis à définir les valeurs des paramètres. Ainsi, votre code devrait être :

{
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");
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X