2008-12-16 16 views

Antwort

7

Nachdem ich gerade gewesen von dieser durch den Schmerz, hier ein paar Hinweise, die Sie hoffentlich Zeit sparen ...

Crystal Reports on MSDN - viele gute Sachen in der hier

Which Persistence Approach Should I Use with Crystal Reports - gibt Detail und Code besten Proben, wie die lifesycle eines Berichts Objekt zu steuern

This post gibt auch einige gute Ratschläge rund um den Bericht Objekt Lifecycle

Deployment ... Th Die neuesten Crystal Reports-Laufzeiten können nicht in einer 64-Bit-Umgebung ausgeführt werden. Wenn Sie sie auf einem 64-Bit-Server bereitstellen, müssen Sie entweder IIS für die Ausführung eines 32-Bit-Modus konfigurieren oder eine frühere Version der Laufzeit verwenden. \ Programme \ Microsoft SDKs \ Windows \ V6.0A \ Bootstrapper \ Packages \ CrystalReports10_5

: Ich habe das meiste Glück mit der Laufzeit hatte, die mit VS2008 verteilt wird, kann dies in

C finden

Ich bemerke, dass Sie ASP.NET 2.0 verwenden - ich bin sicher, dass es eine äquivalente VS2005-Laufzeit gibt. Versuchen Sie, die Implementierungsumgebung früh im Projekt zu verwenden, da dies zweifellos mehr Kopfschmerzen verursacht, als Sie erwarten.

Ein letzter Punkt, der uns einige Zeit gekostet hat und erwähnenswert ist - der Standardparameterbildschirm in Crystal Reports wird Sie nur so weit bringen. Wenn Sie mit der Darstellung Ihrer Parameter für den Benutzer komplex werden möchten (z. B. indem Sie Parameter abhängig von der Auswahl eines anderen Parameters haben), müssen Sie Ihre eigenen Parameterbildschirme rollen. Dies ist ziemlich einfach, da das Objektmodell Ihnen Zugriff auf alle Informationen gibt, die Sie über Parameter benötigen. Wir haben den Weg zur Erstellung eines generischen Parameterbildschirms, der sich gemäß den Parametern des Berichts, auf den er gerichtet ist, selbst erstellt.

0

Dies ist der Code, den ich verwenden in der Regel:

'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

Das ist, was ich in der Regel verwenden, 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(); 
    } 

und auf Aspx Seite:

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