2017-08-24 2 views
3

Je crée un programme crystal report @ C# mais lorsque j'exécute le rapport, il fonctionne d'abord mais quand j'exécute le même rapport à la deuxième fois j'ai cette erreur. J'utilise view to sql server pour récupérer mes données.C# Crystal report argument hors de l'exception

cmd = new SqlCommand("Select * From referral where referralNo = '" + 
lblReferral.Text + "' and clientNo = '" + cbClientNo.Text + "'", con); 
cmd.CommandType = CommandType.Text; 
da.SelectCommand = cmd; 
da.Fill(ds, "referral"); 
rp.SetDataSource(ds); 
f3.crt.ReportSource = rp; 
f3.Show(); 
rp.Close(); 

J'ai cette erreur.

An unhandled exception of type 'System.ArgumentOutOfRangeException' 
occurred in System.Windows.Forms.dll 

Additional information: Index 0 is out of range. 

alors ce sont les instances

CrystalReport1 rp = new CrystalReport1(); 
SqlDataAdapter da = new SqlDataAdapter(); 
DataSet ds = new DataSet(); 
reportViewer f3 = new reportViewer(); 

Error @reviewing the report

+0

où est créée l'instance de rapport ('crt')? est-ce un contrôle qui a été ajouté à f3 au moment du design? essayez d'obtenir la pile d'appel d'exception complète et publiez-la ici. * indice habituel le code n'est pas sûr pour les scripts, les utilisateurs pourraient injecter un code malveillant si le texte dans lblreferral ou cbclientno est modifiable * – dlatikay

+0

merci pour le conseil le crt leur est le rapport de cristal et le f3 est le formulaire utilisé pour le reportviewer j'utilise une vue pour obtenir toutes ces données alors le lblreferral est un nombre autogénéré et cbclient est un combobox qui stocke clientno seulement –

+0

ok est-ce que vous créez une nouvelle instance de tout avant votre deuxième exécution, ou réutilisez-vous les instances existantes? – dlatikay

Répondre

1

je me suis dit la réponse à mon problème, il demande une exception d'argument parce que le programme, j'ai appelé formulaire via form.Show() au lieu form.ShowDialog().