2010-11-16 5 views
1

J'ai un rapport exporté vide et je ne sais pas pourquoi cela se produit.Pourquoi le rapport exporté est-il vide?

Je le code suivant dans une de mes méthodes:

ReportDocument report = new ReportDocument(); 
    report.Load(pathToReport); 

Après le chargement avec succès, et je lâchais tous mes paramètres en utilisant la méthode suivante:

public static void SetParameterValue(ReportDocument document,string parName,object value) 
    { 
     ParameterFieldDefinition f = document.DataDefinition.ParameterFields[parName]; 
     ParameterDiscreteValue v = new ParameterDiscreteValue(); 
     v.Value = value; 
     f.CurrentValues.Add(v); 
     f.DefaultValues.Add(v); 
     f.ApplyDefaultValues(f.DefaultValues); 
     f.ApplyCurrentValues(f.CurrentValues); 
    } 

Et après l'appel ci-dessus, j'appelle :

private void ApplyNewServer(ReportDocument report) 
    { 
     //Initialize subreports connection first 
     foreach (ReportDocument subreport in report.Subreports) 
     { 
      foreach (Table crTable in subreport.Database.Tables) 
      { 
       TableLogOnInfo logOnInfo = crTable.LogOnInfo; 
       logOnInfo.ConnectionInfo.ServerName = "serverName"; 
       logOnInfo.ConnectionInfo.UserID ="user"; 
       logOnInfo.ConnectionInfo.Password ="password"; 
       logOnInfo.ConnectionInfo.IntegratedSecurity = false; 

       crTable.ApplyLogOnInfo(logOnInfo); 
      } 
     } 

     foreach (Table crTable in report.Database.Tables) 
     { 
      TableLogOnInfo logOnInfo = crTable.LogOnInfo; 
      logOnInfo.ConnectionInfo.ServerName = "serverName"; 
      logOnInfo.ConnectionInfo.UserID = "user"; 
      logOnInfo.ConnectionInfo.Password = "password"; 
      logOnInfo.ConnectionInfo.IntegratedSecurity = false; 

      crTable.ApplyLogOnInfo(logOnInfo); 
     } 

     VerifyDatabase(report); 

     foreach (IConnectionInfo info in report.DataSourceConnections) 
     { 
      if (info.Type == ConnectionInfoType.CRQE) 
      { 
       info.SetConnection("databaseName", string.Empty,"user","password"); 
      } 
     } 
    } 

Et VerifyDatabase fait:

private void VerifyDatabase(ReportDocument report) 
    { 
     report.SetDatabaseLogon(user, pwd, dbName, String.Empty); 
     report.VerifyDatabase(); 
    } 

Après cela, je tente d'exporter mon rapport:

public bool ExportReport(ReportDocument reportDocument, string exportType, string exportPath, string fileName) 
    { 
     //creating full report file name 
     fileName = fileName + "." + exportType; 

     //creating storage directory if not exists 
     if (!Directory.Exists(exportPath)) 
      Directory.CreateDirectory(exportPath); 

     //creating new instance representing disk file destination 
     //options such as filename, export type etc. 
     DiskFileDestinationOptions diskFileDestinationOptions = new DiskFileDestinationOptions(); 
     ExportOptions exportOptions = reportDocument.ExportOptions; 

     switch (exportType) 
     { 

      case "rpt": 
       { 
        diskFileDestinationOptions.DiskFileName = exportPath + fileName; 
        exportOptions.ExportDestinationType = ExportDestinationType.DiskFile; 
        exportOptions.ExportFormatType = ExportFormatType.CrystalReport; 
        exportOptions.DestinationOptions = diskFileDestinationOptions; 
        break; 
       } 
     } 
     try 
     { 
      //trying to export input report document, 
      //and if success returns true 
      reportDocument.Export(); 
      return true; 
     } 
     catch (Exception err) 
     { 
      return false; 
     } 
    } 

Et mon rapport est exporté, mais n'a pas de données en mode de prévisualisation, pas même les champs de mode de conception.

Quelqu'un, aidez s'il vous plaît! Je suis nouveau à Crystal Reports.

+0

Dans l'exemple de code que vous avez affiché, vous n'appelez jamais 'ExportReport'. Avez-vous traversé le code en utilisant le débogueur? Vous attrapez silencieusement des exceptions, ce qui est généralement une mauvaise chose, surtout quand il s'agit d'analyser des problèmes. –

Répondre

0

Si vous obtenez un fichier RPT créé, votre code d'exportation fonctionne correctement.

Pour le rapport "vide", je regarderais le code du paramètre. Chaque fois que vous automatisez un rapport et que vous n'obtenez aucune donnée, 99,9% du temps est lié au paramétrage des paramètres et/ou des critères de sélection des enregistrements (qui utilisent souvent les paramètres définis).

Regardez là.

0

Je suppose que mon problème est que les rapports sont créés dans Web.csproj et qu'il n'y a pas d'autorisation de lecture/écriture dans IIS pour cela, pour permettre la lecture et l'écriture dans le dossier Temp de Windows ... Je vais vérifier chose et je reviendrai avec une réponse.

Questions connexes