Utilisation du contrôle ReportViewer dans ASP.NET 2.0
Auteur:Eve Cole
Date de mise à jour:2009-07-01 16:43:40
Traduction de cet article : webabcd
introduire
Le reporting est une exigence courante pour toute application basée sur les données. Cependant, cette fonctionnalité très importante ne nous est pas fournie dans ASP.NET 1.x. Heureusement, le contrôle ReportViewer fourni avec .NET 2.0 peut répondre à certains de vos besoins de base en matière de rapports. Je vais vous montrer comment utiliser ce contrôle dans cet article. Le contrôle ReportViewer peut être utilisé à la fois dans les programmes Web et dans les programmes Windows. Ici, je présenterai uniquement comment l'utiliser dans les programmes Web.
Exemple de rapport
Nous supposons que nous souhaitons générer une liste d’informations client comme indiqué ci-dessous :
Le rapport ci-dessus est une liste très simple d'informations sur les clients regroupées par pays. Les données du rapport sont obtenues à partir de la table Customers de la base de données Northwind. Par défaut, il affiche toutes les informations client. Cependant, vous pouvez également lui faire afficher des informations sur les clients appartenant à un pays que vous spécifiez.
Le rapport est conçu à l'aide du contrôle ReportViewer, qui peut obtenir des données à partir d'un DataSet fortement typé ou d'une collection d'objets personnalisés. Dans le développement réel de programmes, nous utilisons souvent une architecture à trois niveaux et les données obtenues sont souvent un DataSet ou une collection générique obtenue à partir de la couche métier. Ici, je prévois d'utiliser une collection générique comme source de données au lieu d'un DataSet fortement typé.
Créer une bibliothèque de classes
Tout d’abord, ouvrez Visual Studio et créez un projet de bibliothèque de classes appelé ReportViewerLib. Ajoutez une classe nommée Customer comme indiqué ci-dessous :
utiliser le système ; en utilisant System.Data ; en utilisant System.Configuration ; en utilisant System.Data.SqlClient ; en utilisant System.Collections.Generic ; espace de noms ReportViewerLib { classe publiqueClient { chaîne publique strCustomerID ; chaîne publique strCompanyName ; chaîne publique strContactName ; chaîne publique strCountry ;
chaîne publique ID client { obtenir { retourner strIDClient ; } ensemble { strCustomerID = valeur ; } }
chaîne publique CompanyName { obtenir { retourner strCompanyName ; } ensemble { strCompanyName = valeur ; } }
chaîne publique NomContact { obtenir { return strNomContact ; } ensemble { strContactName = valeur ; } }
chaîne publique Pays { obtenir { retourner strPays; } ensemble { strCountry= valeur ; } }
Liste statique publique |
GetCustomersForCountry (chaîne pays) { SqlConnection cnn=nouveau SqlConnection( ConfigurationManager.ConnectionStrings["NorthwindConnectionString"].ConnectionString); SqlCommand cmd=new SqlCommand(); cmd.Connection=cnn; cmd.CommandText="sélectionner ID client, nom de l'entreprise, nom du contact, pays des clients où country=@country" ; SqlParameter p=nouveau SqlParameter ("@pays",pays); cmd.Parameters.Add(p); cnn.Open(); Lecteur SqlDataReader = cmd.ExecuteReader(); Liste |
(); tandis que (lecteur.Read()) { Client c = nouveau client (); c.CustomerID = lecteur.GetString(0); c.CompanyName = reader.GetString(1); c.ContactName = lecteur.GetString(2); c.Pays = lecteur.GetString(3); list.Add(c); } cnn.Close(); liste de retour ; }
Liste statique publique |
ObtenirTouslesClients() { SqlConnection cnn = nouveau SqlConnection ( ConfigurationManager.ConnectionStrings ["NorthwindConnectionString"].ConnectionString); SqlCommand cmd = new SqlCommand(); cmd.Connection = cnn; cmd.CommandText = "sélectionner CustomerID,CompanyName,ContactName,Country des clients" ; cnn.Open(); Lecteur SqlDataReader = cmd.ExecuteReader(); Liste |
(); tandis que (lecteur.Read()) { Client c = nouveau client (); c.CustomerID = lecteur.GetString(0); c.CompanyName = reader.GetString(1); c.ContactName = lecteur.GetString(2); c.Pays = lecteur.GetString(3); list.Add(c); } cnn.Close(); liste de retour ; }
} }
|
La classe Customer définit quatre propriétés publiques, à savoir CustomerID, CompanyName, ContactName et Country. Après cela, cette classe contient deux méthodes statiques : GetCustomersForContry() et GetAllCustomers(). Ces deux méthodes sont relativement simples : l'une renvoie toutes les informations client appartenant à un certain pays et l'autre renvoie toutes les informations client. Ouvrez d'abord la connexion à la base de données Northwind, puis exécutez la requête SELECT via l'objet SqlCommand. Après cela, utilisez l'objet SqlDataReader pour obtenir les données. Parcourez cet objet SqlDataReader, créez à chaque fois un objet Customer à l'intérieur, puis définissez ses différentes propriétés, et enfin ajoutez-le à la collection générique d'objets Customer. A la fin du cours, la collection générique d'objets Customer est renvoyée à l'appelant.
Créer une source de données
Lors de la conception d'un rapport, vous devez spécifier une source de données pour celui-ci dans votre projet. Pour ajouter une source de données à votre projet, vous pouvez le faire en sélectionnant le menu Données -> Ajouter une nouvelle source de données. Ensuite, la boîte de dialogue ci-dessous apparaîtra :
Votre source de données peut être une base de données, un service Web ou un objet. Dans ce cas, nous avons sélectionné Objet. Cliquez ensuite sur le bouton « Suivant » et une interface permettant de sélectionner une source de données apparaîtra. Nous avons choisi la classe Customer (comme le montre la figure ci-dessous).
Cliquez sur le bouton "Terminer" pour terminer l'assistant de configuration de la source de données. De cette façon, vous avez ajouté une nouvelle source de données à votre bibliothèque de classes. Si vous souhaitez afficher la source de données, vous pouvez le faire. Sélectionnez le menu "Données" -> Afficher la source de données, et l'interface illustrée ci-dessous apparaîtra :
Concevoir des rapports
Ajoutez ensuite un rapport. Faites un clic droit sur le projet et sélectionnez "Ajouter un nouvel élément". Sélectionnez « Rapport » dans la boîte de dialogue et cliquez sur le bouton « Ajouter » (comme indiqué dans la figure ci-dessous). De cette façon, nous avons ajouté un fichier nommé "Report1.rdlc". Le fichier .rdlc est un fichier de rapport qui enregistre la présentation du rapport et le mappage des données.
Une fois que vous ouvrez le fichier Report1.rdlc, un ensemble de contrôles liés au rapport sera affiché dans la boîte à outils Visual Studio (comme indiqué ci-dessous).
Parmi ces champs, le champ "Zone de Texte" et le champ "Tableau" sont très couramment utilisés. Le champ "Zone de Texte" permet d'afficher un morceau de texte statique ou une expression. Le champ "Tableau" permet d'afficher des données tabulaires, et les résultats générés par celui-ci seront affichés dans le "corps" de votre rapport.
Le rapport conçu est présenté ci-dessous :
En tête de la section « En-tête » du rapport, se trouve une zone de texte dont la propriété Value est « Liste client ». Il y a une autre zone de texte sous cette zone de texte et la valeur de sa propriété Value est "=Parameters!SubTitle.Value". Cela signifie que la valeur de la zone de texte provient du paramètre nommé SubTitle. Comment définir les paramètres ? Cela nécessite l'ajout de paramètres dans la propriété ReportParameters du rapport. La boîte de dialogue des paramètres du rapport ouverte est illustrée dans la figure ci-dessous :
Attention : La définition des paramètres se fait dans notre code .NET.
Si vous souhaitez afficher la date sur le rapport, définissez simplement la propriété Value de la zone de texte appropriée sur "=FormatDateTime(ToDay(),DateFormat.ShortDate)". L'un des grands avantages des rapports est qu'ils disposent de nombreuses fonctions intégrées, telles que ToDay() et FormatDateTime. Dans cet exemple, nous utilisons la fonction FormatDateTime() pour afficher la date actuelle (ToDay()) au format ShortDate.
Maintenant, faites glisser un champ "Table" de la boîte à outils sur votre rapport. Par défaut, le champ "Tableau" comporte 3 lignes et 3 colonnes. Les 3 lignes sont : en-tête de tableau, informations détaillées et pied de tableau. Bien entendu, vous pouvez également ajouter des lignes et des colonnes au champ Table. Faites glisser les propriétés CustomerID, CompanyName, ContactName et Country de la fenêtre de la source de données vers la ligne de détails de votre contrôle Table. De cette façon, le système ajoutera automatiquement une zone de texte et définira ses propriétés sur =Fields!CustomerID.Value, =Fields!CompanyName.Value et ainsi de suite. À ce stade, les en-têtes de colonnes seront également automatiquement ajoutés. Bien entendu, vous pouvez également apporter les modifications dont vous avez besoin selon vos besoins.
Ensuite, nous souhaitons regrouper les enregistrements par pays auquel appartient le client. Cliquez avec le bouton droit sur la bordure de la ligne de détails et sélectionnez Insérer un groupe (comme indiqué dans l'image ci-dessous).
Ensuite, la boîte de dialogue ci-dessous apparaîtra :
Dans l'onglet "Tri", sélectionnez "=Fields!Country.Value" comme expression et "Ascending" comme sens de tri.
Ce sont des choses très simples. Nous avons ainsi achevé la conception du rapport.
Afficher le rapport
Créez un nouveau site Web nommé "ReportViewerDemo". Ajoutez une référence à l'assembly ReportViewerLib afin que l'assembly soit copié dans le répertoire BIN de votre site Web. Après cela, ajoutez le fichier Report1.rdlc à votre site Web. Faites glisser un contrôle ReportViewer dans l'onglet « Données » de la boîte à outils vers votre page Default.aspx, ouvrez le panneau de balises actives du contrôle ReportViewer et sélectionnez Report1.rdlc dans la liste déroulante « Sélectionner un rapport », comme indiqué dans le figure ci-dessous :
Après avoir sélectionné le fichier de rapport, le système ajoutera automatiquement un contrôle de source de données d'objet avec la propriété TypeName comme Client. Vous pouvez le vérifier dans l'assistant de configuration du contrôle de source de données objet.
Ensuite, faites glisser un contrôle DropDownList vers l'en-tête de la page et définissez quatre options : Tous, États-Unis, Royaume-Uni et Brésil. Définissez également sa propriété AutoPostBack sur True. Ensuite, ouvrez l'assistant de configuration du contrôle de source de données et définissez l'opération « SELECT » sur la méthode SelectCustomersForCountry().
Définissez le paramètre country de la méthode SelectCustomersForCountry() sur SelectedValue de DropDownList1.
Par défaut, toutes les informations client sont affichées dans le rapport. Lorsque vous sélectionnez un pays dans la DropDownList, les informations client appartenant au pays que vous avez sélectionné seront affichées dans le rapport. Pour compléter une telle fonction, il suffit de gérer l'événement SelectedIndexChanged de DropDownList.
vide protégé DropDownList1_SelectedIndexChanged (expéditeur d'objet, EventArgs e) { si (DropDownList1.SelectedValue == "Tous") { ObjectDataSource1.SelectMethod = "GetAllCustomers" ; ObjectDataSource1.SelectParameters.Clear(); Paramètre ReportParameter = nouveau ReportParameter ("SubTitle", "Liste de tous les clients"); ReportParameter[] p ={ param }; ReportViewer1.LocalReport.SetParameters(p); } autre { ObjectDataSource1.SelectMethod = "GetCustomersForCountry"; ObjectDataSource1.SelectParameters[0].DefaultValue = DropDownList1.SelectedValue ;
Paramètre ReportParameter = nouveau ReportParameter ("SubTitle", "Liste des clients pour un pays"); ReportParameter[] p ={ param }; ReportViewer1.LocalReport.SetParameters(p); } } |
Ce code vérifie d'abord la propriété SelectedValue du contrôle DropDownList. S’il s’agit de « All », définissez la propriété SelectMethod du contrôle de source de données sur GetAllCustomers. De plus, nous devons également effacer la collection SelectParameters car la méthode GetAllCustomers() ne nécessite aucun paramètre. Ensuite, nous créons une instance de la classe ReportParameter et définissons le nom et la valeur du paramètre du rapport dans son constructeur. Rappelez-vous les paramètres que nous avons définis lors de la conception du rapport. Créez ensuite un tableau ReportParameter. Appelez la méthode SetParameters() avec ce tableau comme paramètre. Le bloc de code « else » est également très simple, c'est-à-dire que la méthode utilisée devient GetCustomersForCountry().
Ce sont des choses très simples. Le rapport est terminé. Vous pouvez exécuter la page Default.aspx pour voir l'effet. Notez que le contrôle ReportViewer possède des fonctionnalités d'exportation intégrées, qui vous permettent d'exporter des rapports au format Excel ou PDF. Le contrôle ReportViewer possède également de nombreuses propriétés, vous pouvez les explorer vous-même.
Résumer
Le contrôle ReportViewer d'ASP.NET fournit de nombreuses fonctions de base des rapports. Dans cet article, nous utilisons le contrôle de source de données objet pour développer un rapport. Nous avons créé une bibliothèque de classes et une source de données. Enfin, utilisez le contrôle ReportViewer pour afficher le rapport.