2008-12-16 10 views

Répondre

7

Tout juste par la douleur de moi-même, voici quelques conseils qui nous l'espérons vous faire gagner du temps ...

Crystal Reports on MSDN - beaucoup de bonnes choses ici

Which Persistence Approach Should I Use with Crystal Reports - donne les détails et le code des échantillons sur la meilleure façon de contrôler la lifesycle d'un objet rapport

This post donne aussi quelques bons conseils autour du cycle de vie de l'objet du rapport

de déploiement ... Th Les dernières versions de Crystal Reports ne s'exécutent pas dans un environnement 64 bits. Si vous effectuez un déploiement sur un serveur 64 bits, vous devez configurer IIS pour qu'il exécute un mode 32 bits ou utiliser une version antérieure du moteur d'exécution. J'ai eu le plus de chance avec le moteur d'exécution qui est distribué avec VS2008, cela peut être trouvé dans

C: \ Program Files \ Microsoft SDKs \ Windows \ v6.0A \ \ Bootstrapper Packages \ CrystalReports10_5

Je remarque que vous utilisez ASP.NET 2.0 - je suis sûr qu'il existe une exécution VS2005 équivalente. Essayez de faire fonctionner l'environnement de déploiement dès le début du projet, car cela causera sans doute plus de maux de tête que prévu. Enfin, un dernier point qui nous a coûté du temps et mérite d'être mentionné - l'écran des paramètres standard de Crystal Reports ne vous mènera que jusqu'à présent. Si vous voulez vous compliquer avec la façon dont vous présentez vos paramètres à l'utilisateur (par exemple en ayant un paramètre dépendant de la sélection d'un autre paramètre), vous devrez lancer vos propres écrans de paramètres. C'est assez facile car le modèle d'objet vous donne accès à toutes les informations dont vous aurez besoin sur les paramètres. Nous avons décidé de créer un écran de paramètres génériques qui se construit en fonction des paramètres trouvés dans le rapport auquel il est destiné.

0

C'est le code que j'utilise en général:

'Generate the Report 
Dim oRpt As New ReportDocument 
Dim reportPath As String = Server.MapPath("crtTAL.rpt") 
oRpt.Load(reportPath) 

oRpt.SetDataSource(dsTAL) 

If Not IO.Directory.Exists(tempLocation) Then 
    IO.Directory.CreateDirectory(tempLocation) 
End If 

If IO.File.Exists(tempLocation & filename) Then 
    IO.File.Delete(tempLocation & filename) 
End If 

' ******************************** 

' First we must create a new instance of the diskfiledestinationoptions class and 
' set variable called crExportOptions to the exportoptions class of the reportdocument. 
Dim crDiskFileDestinationOptions As New DiskFileDestinationOptions 
Dim crExportOptions As ExportOptions = oRpt.ExportOptions 

'Export to Word 

'append a filename to the export path and set this file as the filename property for 
'the DestinationOptions class 
crDiskFileDestinationOptions.DiskFileName = tempLocation + filename 

'set the required report ExportOptions properties 
With crExportOptions 
    .DestinationOptions = crDiskFileDestinationOptions 
    .ExportDestinationType = ExportDestinationType.DiskFile 
    .ExportFormatType = ExportFormatType.WordForWindows 
End With 

'Once the export options have been set for the report, the report can be exported. The Export command 
'does not take any arguments 
Try 
    ' Export the report 
    oRpt.Export() 
    oRpt.Close() 
    oRpt.Dispose() 
    projectCount = projectCount + 1 
Catch err As Exception 
    Response.Write("<BR>") 
    Response.Write(err.Message.ToString) 
    errorList = errorList & dtrProjects.Item("Title") & "; " 
End Try 
0

Thats ce que je l'habitude d'utiliser, Asp.net/C#

public partial class _Default : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 

     ///create instance of class first 
     ReportDocument rpDoc = new ReportDocument(); 
     ///load the report 
     rpDoc.Load(@"TicketingBasic.rpt"); 

     ///pass the report to method for dataInfo 
     getDBInfo(rpDoc); 
     /// et the source for report to be displayed 
     CrystalReportViewer1.ReportSource = rpDoc; 
    } 

    protected static void getDBInfo(ReportDocument rpDoc) 
    { 
     ///Connection Onject 
     ConnectionInfo cn = new ConnectionInfo(); 
     ///DataBase,Table, and Table Logon Info 
     Database db; 
     Tables tbl; 
     TableLogOnInfo tblLOI; 

     ///Connection Declaration 
     cn.ServerName = "??????"; 
     cn.DatabaseName = "???????"; 
     cn.UserID = "???????"; 
     cn.Password = "????????"; 

     //table info getting from report 
     db = rpDoc.Database; 
     tbl = db.Tables; 

     ///for each loop for all tables to be applied the connection info to 
     foreach (Table table in tbl) 
     { 
      tblLOI = table.LogOnInfo; 
      tblLOI.ConnectionInfo = cn; 
      table.ApplyLogOnInfo(tblLOI); 
      table.Location = "DBO." + table.Location.Substring(table.Location.LastIndexOf(".") + 1); 

     } 

     db.Dispose(); 
     tbl.Dispose(); 
    } 

et sur le côté Aspx:

<CR:CrystalReportViewer 
    ID="CrystalReportViewer1" 
    runat="server" 
    AutoDataBind="true" 
    EnableDatabaseLogonPrompt="false" 
    />