2013-04-01 4 views
-2

J'ai regardé partout, beaucoup de recherche, testé de nombreux codes différents des peuples, et toujours le même problème en essayant d'ouvrir un rapport de cristal en envoyant deux paramètres au rapport.C# Crystal Reports appel

À chaque ouverture, il s'ouvre en blanc. Je frappe l'actualisation sur le spectateur, et il demande des paramètres et ouvre très bien.

Mon code est répertorié ci-dessous. Je suis sur une date limite. J'apprécierais que quelqu'un puisse regarder cela et m'aider. Je suis perdu après de nombreuses heures de recherche.

 ReportDocument cryRpt = new ReportDocument(); 
     cryRpt.Load(@"C:\reports\myReport.rpt"); 
     cryRpt.SetDatabaseLogon("", "", "MyServer", "MyDB"); 
     ConnectionInfo c = new ConnectionInfo(); 
     c.ServerName = "MyServer"; 
     c.IntegratedSecurity = true; 
     c.DatabaseName = "MyDB"; 

     CrystalDecisions.CrystalReports.Engine.Tables CrTables = cryRpt.Database.Tables; 

     foreach (CrystalDecisions.CrystalReports.Engine.Table CrTable in CrTables) 
     { 
      CrystalDecisions.Shared.TableLogOnInfo crtableLogoninfo = CrTable.LogOnInfo; 
      crtableLogoninfo.ConnectionInfo = c; 
      CrTable.ApplyLogOnInfo(crtableLogoninfo); 
     } 

     cryRpt.SetParameterValue("@parmBeginDate", "01-01-2010"); 
     cryRpt.SetParameterValue("@parmEndDate", "03-30-2013"); 
     crystalReportViewer1.ReportSource = cryRpt; 
     crystalReportViewer1.Refresh(); 
     crystalReportViewer1.Show(); 
+0

Je modifié pour supprimer des noms de bases de données spécifiques entreprise, les chemins et les serveurs –

Répondre

0

La réponse était de déclarer mes paramètres APRÈS avoir chargé le rapport dans le crystalreportviewer. Puis actualisez. Ça a bien marché après ça. Merci de votre aide.

2

Cela se produit si votre rapport a un ou plusieurs sous-rapports. Essayez de refactoriser la définition de la connexion de rapport à une méthode. Vous pouvez ensuite énumérer la collection de sous-rapports et définir les informations de connexion pour chaque sous-rapport. Je préfère également définir directement l'objet ConnectionInfo.

foreach (ReportDocument subReport in report.Subreports) 
{ 
    SetDatabaseConnectionInformation(subReport); 
} 

private void SetDatabaseConnectionInformation(ReportDocument report) 
{ 
    ConnectionInfo connectionInfo = new ConnectionInfo(); 
    connectionInfo.AllowCustomConnection = true; 
    connectionInfo.Type = ConnectionInfoType.SQL; 
    connectionInfo.ServerName = MyServer; 
    connectionInfo.IntegratedSecurity = (true or false); 
    connectionInfo.UserID = MyUserName; 
    connectionInfo.Password = MyPassword; 
    foreach (Table table in report.Database.Tables) 
    { 
     TableLogOnInfo tableLogOnInfo = table.LogOnInfo; 
     tableLogOnInfo.ConnectionInfo = connectionInfo; 
     table.ApplyLogOnInfo(tableLogOnInfo); 
    } 
} 

Aussi, si vous avez plusieurs sources de données, vous devez définir la classe InternalConnectionInfo pour définir individuellement les informations de connexion pour les différentes sources de données.

+0

son rapport de base sans rapports sous –

+0

je peux joindre le rapport privé si vous le souhaitez –

+0

Sont MyServer et MyDB la même base de données et le serveur le rapport a été construit avec ? http://msdn.microsoft.com/en-us/library/ms227750%28v=vs.80%29.aspx – jac