Ouvrir un fichier de rapport Crystal Reports en VB.NET
Crystal Reports est un outil puissant pour générer des rapports. Si vous utilisez VB.NET, il est possible d’intégrer Crystal Reports pour afficher, manipuler et exporter des rapports directement dans votre application.
Prérequis
- Visual Studio :
- Installez une version compatible avec Crystal Reports.
- Crystal Reports Runtime :
- Téléchargez et installez le runtime de Crystal Reports correspondant à votre architecture (32 ou 64 bits).
- Bibliothèque Crystal Reports :
- Assurez-vous que le package CrystalDecisions.CrystalReports.Engine est ajouté à votre projet.
Étape 1 : Ajouter un fichier de rapport Crystal Reports
- Créer un rapport Crystal Reports :
- Dans Visual Studio, ajoutez un nouveau fichier
.rpt
à votre projet. - Configurez la source de données (base de données, dataset, etc.).
- Conceptionnez le rapport en ajoutant des champs, groupes, sections, etc.
- Dans Visual Studio, ajoutez un nouveau fichier
- Ajouter une référence aux bibliothèques Crystal Reports :
- Cliquez droit sur le projet > Ajouter une Référence > Parcourir.
- Sélectionnez les DLL suivantes, généralement situées dans le dossier
Crystal Reports
:CrystalDecisions.CrystalReports.Engine
CrystalDecisions.ReportSource
CrystalDecisions.Shared
CrystalDecisions.Web
CrystalDecisions.Windows.Forms
Étape 2 : Interface Utilisateur
Pour afficher le rapport dans une application Windows Forms, vous devez ajouter un CrystalReportViewer à votre formulaire.
- Ajoutez un contrôle
CrystalReportViewer
:- Depuis l’onglet Boîte à outils, recherchez CrystalReportViewer.
- Faites glisser le contrôle sur votre formulaire (
Form1
).
Étape 3 : Charger et Afficher un Rapport
Ajoutez le code pour charger et afficher le rapport dans votre formulaire.
Exemple de Code Complet
Voici un exemple de code pour ouvrir et afficher un rapport Crystal Reports dans une application Windows Forms :
Imports CrystalDecisions.CrystalReports.Engine
Imports CrystalDecisions.Shared
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Try
' Créer une instance du rapport
Dim reportDocument As New ReportDocument()
' Chemin du fichier Crystal Report (.rpt)
Dim reportPath As String = "C:\Chemin\Vers\VotreRapport.rpt"
reportDocument.Load(reportPath)
' Configuration de la source de données (si nécessaire)
Dim connectionInfo As New ConnectionInfo()
connectionInfo.ServerName = "NomServeur" ' Nom du serveur ou chemin du fichier
connectionInfo.DatabaseName = "NomBaseDeDonnees" ' Nom de la base de données
connectionInfo.UserID = "VotreUtilisateur" ' Identifiant utilisateur
connectionInfo.Password = "VotreMotDePasse" ' Mot de passe utilisateur
' Appliquer les informations de connexion à toutes les tables du rapport
For Each table As Table In reportDocument.Database.Tables
Dim logonInfo As TableLogOnInfo = table.LogOnInfo
logonInfo.ConnectionInfo = connectionInfo
table.ApplyLogOnInfo(logonInfo)
Next
' Lier le rapport au CrystalReportViewer
CrystalReportViewer1.ReportSource = reportDocument
' Rafraîchir le rapport pour s'assurer que les données sont à jour
CrystalReportViewer1.Refresh()
Catch ex As Exception
MessageBox.Show($"Erreur lors du chargement du rapport : {ex.Message}", "Erreur", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End Sub
End Class
Étape 4 : Explications du Code
- Chargement du fichier rapport :
- Le chemin du fichier rapport est spécifié dans
reportDocument.Load(reportPath)
.
- Le chemin du fichier rapport est spécifié dans
- Connexion à la base de données :
- Si votre rapport dépend d’une base de données, configurez la connexion avec
ConnectionInfo
.
- Si votre rapport dépend d’une base de données, configurez la connexion avec
- Appliquer les informations de connexion :
- Utilisez
ApplyLogOnInfo
pour chaque table du rapport pour garantir que les informations de connexion sont appliquées.
- Utilisez
- Afficher le rapport :
- Le contrôle
CrystalReportViewer
permet d’afficher le rapport directement dans le formulaire.
- Le contrôle
Étape 5 : Options Supplémentaires
Exporter un rapport au format PDF
Vous pouvez exporter un rapport directement au format PDF :
Dim exportPath As String = "C:\Chemin\Vers\RapportExporté.pdf"
reportDocument.ExportToDisk(ExportFormatType.PortableDocFormat, exportPath)
MessageBox.Show("Rapport exporté avec succès !")
Passer des paramètres au rapport
Si votre rapport accepte des paramètres, vous pouvez les passer ainsi :
Dim paramField As New ParameterField()
Dim paramValue As New ParameterDiscreteValue()
paramField.Name = "NomParametre"
paramValue.Value = "ValeurDuParametre"
paramField.CurrentValues.Add(paramValue)
Dim paramFields As New ParameterFields()
paramFields.Add(paramField)
CrystalReportViewer1.ParameterFieldInfo = paramFields
Rafraîchir les données
Pour s’assurer que le rapport utilise des données mises à jour, appelez :
CrystalReportViewer1.RefreshReport()
Étape 6 : Déploiement
Lors de la publication de votre application, assurez-vous que :
- Le runtime de Crystal Reports est installé sur la machine de l’utilisateur final.
- Tous les fichiers
.rpt
nécessaires sont inclus avec l’application.
Voici quelques cas particuliers auxquels vous pourriez être confronté lorsque vous travaillez avec Crystal Reports dans VB.NET, ainsi que leurs solutions.
1. Le chemin du fichier de rapport est dynamique
Problème
Vous ne voulez pas coder en dur le chemin du fichier .rpt
dans votre application, car l’emplacement du fichier peut varier (par exemple, lors du déploiement).
Solution
Utilisez un chemin dynamique basé sur l’emplacement de l’application :
Dim reportPath As String = System.IO.Path.Combine(Application.StartupPath, "Rapports\VotreRapport.rpt")
Dim reportDocument As New ReportDocument()
reportDocument.Load(reportPath)
CrystalReportViewer1.ReportSource = reportDocument
2. Connexion à une base de données dynamique
Problème
Vous devez permettre à l’utilisateur de fournir les informations de connexion à la base de données (nom du serveur, base de données, etc.) à l’exécution.
Solution
Créez une interface utilisateur pour saisir les informations de connexion, puis appliquez-les au rapport.
Dim connectionInfo As New ConnectionInfo()
connectionInfo.ServerName = txtServerName.Text
connectionInfo.DatabaseName = txtDatabaseName.Text
connectionInfo.UserID = txtUserID.Text
connectionInfo.Password = txtPassword.Text
For Each table As Table In reportDocument.Database.Tables
Dim logonInfo As TableLogOnInfo = table.LogOnInfo
logonInfo.ConnectionInfo = connectionInfo
table.ApplyLogOnInfo(logonInfo)
Next
3. Rapport avec des paramètres
Problème
Votre rapport utilise des paramètres pour filtrer les données (par exemple, une plage de dates ou un identifiant spécifique), et vous devez les passer dynamiquement à l’exécution.
Solution
Utilisez ParameterFields
pour définir et passer les paramètres :
Dim paramFields As New ParameterFields()
Dim paramField As New ParameterField()
Dim paramValue As New ParameterDiscreteValue()
paramField.Name = "NomDuParametre"
paramValue.Value = "ValeurDuParametre"
paramField.CurrentValues.Add(paramValue)
paramFields.Add(paramField)
CrystalReportViewer1.ParameterFieldInfo = paramFields
4. Rapport avec sous-rapports
Problème
Votre rapport principal contient un ou plusieurs sous-rapports, et vous devez configurer les connexions ou passer des paramètres à ces sous-rapports.
Solution
Utilisez Subreports
pour accéder et configurer les sous-rapports.
For Each subReport As ReportDocument In reportDocument.Subreports
For Each table As Table In subReport.Database.Tables
Dim logonInfo As TableLogOnInfo = table.LogOnInfo
logonInfo.ConnectionInfo = connectionInfo
table.ApplyLogOnInfo(logonInfo)
Next
Next
5. Rapport avec une source de données différente à l’exécution
Problème
Vous voulez charger un dataset ou une table de données en tant que source de données pour votre rapport à l’exécution.
Solution
Utilisez SetDataSource
pour assigner un dataset ou une table au rapport.
Dim ds As New DataSet()
' Remplir le dataset avec des données
' Exemple : Remplir une DataTable et l'ajouter au DataSet
Dim dataTable As New DataTable("NomDeLaTable")
' Ajouter des colonnes et des données à dataTable
ds.Tables.Add(dataTable)
Dim reportDocument As New ReportDocument()
reportDocument.Load("VotreRapport.rpt")
reportDocument.SetDataSource(ds)
CrystalReportViewer1.ReportSource = reportDocument
6. Exporter un rapport dans un format spécifique
Problème
Vous voulez exporter le rapport directement au format PDF, Excel ou Word.
Solution
Utilisez ExportToDisk
pour exporter dans le format souhaité.
reportDocument.ExportToDisk(ExportFormatType.PortableDocFormat, "Rapport.pdf")
reportDocument.ExportToDisk(ExportFormatType.Excel, "Rapport.xls")
reportDocument.ExportToDisk(ExportFormatType.WordForWindows, "Rapport.doc")
7. Rapport très volumineux ou lent à charger
Problème
Le rapport contient beaucoup de données, ce qui entraîne une lenteur lors du chargement.
Solution
Optimisez le rapport en appliquant des filtres pour réduire la quantité de données chargées :
Dim paramField As New ParameterField()
Dim paramValue As New ParameterDiscreteValue()
' Ajouter un filtre pour limiter les données (par exemple, une plage de dates)
paramField.Name = "DateDebut"
paramValue.Value = "2024-01-01"
paramField.CurrentValues.Add(paramValue)
' Ajouter un deuxième filtre pour DateFin
Dim paramField2 As New ParameterField()
Dim paramValue2 As New ParameterDiscreteValue()
paramField2.Name = "DateFin"
paramValue2.Value = "2024-12-31"
paramField2.CurrentValues.Add(paramValue2)
Dim paramFields As New ParameterFields()
paramFields.Add(paramField)
paramFields.Add(paramField2)
CrystalReportViewer1.ParameterFieldInfo = paramFields
8. Erreur : “Impossible de trouver les informations de connexion”
Problème
Une erreur se produit car le rapport n’est pas correctement connecté à la source de données.
Solution
Assurez-vous d’appliquer les informations de connexion à toutes les tables du rapport.
Dim connectionInfo As New ConnectionInfo()
connectionInfo.ServerName = "NomServeur"
connectionInfo.DatabaseName = "NomBaseDeDonnees"
connectionInfo.UserID = "Utilisateur"
connectionInfo.Password = "MotDePasse"
For Each table As Table In reportDocument.Database.Tables
Dim logonInfo As TableLogOnInfo = table.LogOnInfo
logonInfo.ConnectionInfo = connectionInfo
table.ApplyLogOnInfo(logonInfo)
Next
9. Utilisation dans une application Web (ASP.NET)
Problème
Vous souhaitez afficher des rapports Crystal Reports dans une application ASP.NET.
Solution
Ajoutez un contrôle CrystalReportViewer
à votre page Web et configurez-le pour afficher le rapport.
Imports CrystalDecisions.CrystalReports.Engine
Public Class WebForm1
Inherits System.Web.UI.Page
Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
If Not IsPostBack Then
Dim reportDocument As New ReportDocument()
Dim reportPath As String = Server.MapPath("Rapports/VotreRapport.rpt")
reportDocument.Load(reportPath)
CrystalReportViewer1.ReportSource = reportDocument
CrystalReportViewer1.RefreshReport()
End If
End Sub
End Class
Ces cas particuliers couvrent des scénarios courants que vous pourriez rencontrer lorsque vous travaillez avec Crystal Reports en VB.NET. Ils montrent comment personnaliser et optimiser vos rapports pour répondre aux besoins spécifiques de votre application.