2010-10-20 20 views
1

Je veux obtenir le travail suivant, s'il vous plaît quelqu'un pourrait conseiller ...Crystal Report dynamique

Dim rpt As ReportDocument 

If (Exists(rpt.ReportDefinition.ReportObjects("crlTitle"))) Then 
    txtTitle = CType(rpt.ReportDefinition.ReportObjects("crlTitle"), TextObject) 
    txtTitle.Color = mainColour 
    txttitle.Text = "Report Title" 
End If 

Toute aide très appréciée.

+0

Étant donné que c'est la méthode standard de faire ce que vous voulez ... Qu'est-ce qui ne fonctionne pas? –

+0

Je reçois une erreur dans Visual Studio indiquant Exists n'est pas déclaré. –

+0

Eh bien, cela aurait été bon de mentionner dans la question. –

Répondre

0

Je n'ai jamais rien fait de tel ... Je ne sais pas si c'est possible. Ce qui fonctionnera certainement est d'utiliser un paramètre pour contrôler le titre du rapport. Créez simplement un paramètre, puis rpt.SetParamterValue("title", "Some Title")

+0

Salut Merci pour votre réponse. et oui, si je produisais tous mes rapports à partir de zéro alors je pourrais le faire de cette façon, ma raison pour demander de le faire dans le code est qu'il y a déjà plus de 200 rapports mis en place et donc cela prend moins de temps code vb. –

+0

Je vois ... afin de changer dynamiquement le rapport, vous devrez peut-être l'enregistrer après avoir modifié ce champ et ensuite l'exécuter. Pouvez-vous essayer un 'rpt.SaveAs (" test.rpt ", RptFileFormat)', puis l'ouvrir et voir si le titre a été changé. – dotjoe

+0

Le problème que j'ai Joe est que l'objet peut ne pas exister sur le rapport, ce qui jetterait une erreur et le rapport ne se chargerait pas. Vous obtenez d'où je viens? –

0

Depuis que vous avez identifié le problème comme "Existe n'est pas défini". Aborder ce problème est plus simple. Essayez de remplacer la ligne «Existe» par:

 
    If (rpt.ReportDefinition.ReportObjects.Contains("crlTitle")) Then 

Y a-t-il eu d'autres problèmes?

+0

L'utilisation de cette méthode me donne une exception IndexOutOfRangeException –

+0

Avoir à faire cela sans accès au module Crystal Reports (c'est-à-dire à partir de l'édition Express), donc le corrigé ci-dessus est probablement seulement proche. –

0

Voici ma solution:

Dim rpt as ReportDocument 
Dim rptTextObject as TextObject = nothing 
Dim mainColour As Color = Color.Green 

Try 
    If (rpt.ReportDefinition.ReportObjects("crlTitle") IsNot Nothing) Then 
     rptTextObject = CType(rpt.ReportDefinition.ReportObjects("crlTitle"), TextObject) 
     rptTextObject.Color = mainColour 
     rptTextObject.Text = "Report Title" 
    End If 
Catch 
End Try 

Je le fais pour chaque objet sur le rapport que je veux soit définir un texte ou couleur définie.

0

Mettre cette ligne de code au début du module

Imports System.IO.File