2010-11-10 28 views
3

J'ai un rapport Crystal Reports et je souhaite modifier un label par programmation à partir de C#. Je peux manipuler la source de données mais ne peux pas éditer une étiquette.Comment modifier une étiquette par programmation dans Crystal Report?

Je suis en train de concevoir un rapport sur les factures, j'ai donc besoin d'afficher les détails de la société, l'heure et d'autres informations que je ne peux pas obtenir de ma source de données.

Répondre

2

Normalement pour une facture, où le nom de l'entreprise et les détails de celui-ci (comme l'adresse etc) sont indiqués en haut de la facture. Dans un tel cas, ce que j'utilise est l'en-tête du rapport. Dans ce cas, vous pouvez transmettre le texte à afficher très facilement. L'autre façon de transmettre quelque chose à l'exécution sera l'utilisation du paramètre report. Vous pouvez lier le paramètre à un champ ou à une formule. Les paramètres sont également très faciles à transmettre.

En une occasion, j'ai utilisé le code ci-dessous pour obtenir les paramètres d'un rapport dynamique et de se lier à un gridview:

private void GetParameters() 
    { 
     //DataTable dt = new DataTable("Params"); 
     string dataTableName = "Params"; 
     //add a tablestyle to the grid so there will be custom columnstyles available 
     // after the datasource has been set.... 
     DataGridTableStyle ts = new System.Windows.Forms.DataGridTableStyle(); 
     ts.MappingName = dataTableName; 
     dtgParams.TableStyles.Add(ts); 

     // DataGridTextBoxColumn 
     DataGridTextBoxColumn cParamName = new DataGridTextBoxColumn(); 
     cParamName.MappingName = "Parameter"; 
     cParamName.HeaderText = "Parameter"; 
     cParamName.ReadOnly=true; 

     // Add the column style to the column style collection 
     ts.GridColumnStyles.Add(cParamName); 

     // DataGridTextBoxColumn 
     DataGridTextBoxColumn cType = new DataGridTextBoxColumn(); 
     cType.MappingName = "Data_Type"; 
     cType.HeaderText = "Data Type"; 
     cType.ReadOnly=true; 

     // Add the column style to the column style collection 
     ts.GridColumnStyles.Add(cType); 

     // DataGridTextBoxColumn 
     DataGridTextBoxColumn cValue = new DataGridTextBoxColumn(); 
     cValue.MappingName = "Value"; 
     cValue.HeaderText = "Value"; 
     cValue.ReadOnly=false; 

     // Add the column style to the column style collection 
     ts.GridColumnStyles.Add(cValue); 

     DataRow dr; 
     dt.Columns.Add(new DataColumn("Parameter",typeof(string))); 
     dt.Columns.Add(new DataColumn("Data_Type",typeof(string))); 
     dt.Columns.Add(new DataColumn("Value",typeof(string))); 

     // For all the Parameters defined in the report 
     for(int i=0;i<ReportDoc.DataDefinition.ParameterFields.Count; i++) 
     { 
      dr = dt.NewRow(); 
      dr[0] = ReportDoc.DataDefinition.ParameterFields[i].ParameterFieldName; 
      dr[1] = ReportDoc.DataDefinition.ParameterFields[i].ParameterValueKind; 
      dr[2] = ReportDoc.DataDefinition.ParameterFields[i].DefaultValues[0]; 
      dt.Rows.Add(dr); 
     } 
     DataView source = new DataView(dt); 
     dtgParams.DataSource = source; 
    } 

Et utilisé le segment de code suivant pour définir les paramètres:

private void SetParamValue (string paramName, string paramValue) 
    { 
     ParameterFieldDefinition PFD = null; 
     ParameterValues PValues = null; 
     ParameterDiscreteValue Parm = null; 
     PValues = new ParameterValues(); 
     PFD = ReportDoc.DataDefinition.ParameterFields[paramName]; 
     Parm = new ParameterDiscreteValue(); 
     Parm.Value = paramValue; 
     PValues.Add(Parm); 
     PFD.ApplyCurrentValues(PValues); 
    } 
+0

Merci @HasanGursoy. Heureux de t'aider. – Kangkan

0

Jetez un oeil à la CR Object Model. Il y a des limites à ce que vous pouvez contrôler par programmation, mais cela devrait aider.

3

Vous devrez en faire une donnée LabelFomulaField qui sera alors accessible par la collection FormulaFieldDefinitions, et vous travaillerez avec l'objet de classe FormulaFieldDefinition qui est d'intérêt pour vous. En outre, ces informations d'entreprise et similaires doivent toujours être placées directement sur le rapport lui-même, c'est-à-dire le fichier RPT édité. Vous voulez le faire en particulier lorsque vous parlez du logo de l'entreprise.

+0

Est-ce correct? C'est la solution la plus simple. –