Introduction :
Cet article est un lien donné par Kanyuanzi avant-hier. J'ai oublié à qui il appartient. Je me souviens seulement que l'adresse http://www.codeproject.com/aspnet/ReportViewer.asp a été publiée, et puis elle l'a été. J'ai dit cela parce que, pour une raison quelconque, il n'a pas été traduit. Plus tard, j'y ai jeté un coup d'œil et cela m'a été utile, car quelqu'un dans l'entreprise travaillait sur des trucs RS, et le département d'optoélectronique en bas avait aussi souvent des besoins en BS. Je connaissais ce truc depuis longtemps mais je n'en avais jamais eu. Il était temps de l'étudier, alors j'ai trouvé cet article. Je l'ai donc étudié attentivement tout l'après-midi, je l'ai d'abord traduit, puis j'ai ajouté quelques idées.
Pendant le processus de traduction, j'ai essayé de le localiser autant que possible, tout en conservant le sens de l'auteur original. S'il y a une inexactitude dans la traduction, veuillez me critiquer et me corriger.
Il existe de nombreux modes de service (Server Mode) de SqlServer RS sur Internet, et j'ai vraiment passé beaucoup de temps à étudier le mode local (Local Mode), notamment lorsqu'il y a des appels de paramètres.
La raison pour laquelle le mode local est utilisé au lieu du mode serveur est que chaque fois que le client en mode service demande un rapport, le serveur doit organiser les données dans un rapport puis l'envoyer au client. Bien que cela soit plus sûr, le rapport volumineux sera généré. ne sera jamais traité. La transmission du serveur au navigateur réduit ses performances.
Cet article décrit donc comment organiser un rapport et le lire à l'aide du contrôle ReportViewer d'ASP.NET2.0. Ici, nous choisissons le mode local et utilisons une procédure stockée avec des paramètres. Ce que j'utilise est ASP.NET2.0, VisualStudio2005 et SQLServer2005 plus Application Block. Si vous ne disposez pas de l'outil Microsoft Application Block, veuillez remplacer le code qui appelle la procédure stockée via SQL Helper dans l'exemple par SQL Command.
Ici, nous choisissons la base de données Northwind. Notre exemple montre à l'utilisateur qu'il sélectionne le nom du produit dans la liste déroulante, puis filtre les informations dans le rapport.
La première étape consiste à créer une procédure stockéeALTER PROCEDURE ShowProductByCategory (@CategoryName nvarchar(15) )
avec les paramètres
AS
SELECT Categories.CategoryName, Products.ProductName,
Products.UnitPrice, Products.UnitsInStock
FROM Categories INNER JOIN Products ON
Categories.CategoryID = Products . CategoryID
WHERE CategoryName=@CategoryName
RETURN
La deuxième étape consiste à utiliser le concepteur DataSet pour créer un DataTable sous le DataSet.
Dans l'interface du gestionnaire de solutions, cliquez avec le bouton droit sur le fichier App_Code et sélectionnez « Ajouter un nouvel élément ». Sélectionnez "DataSet" dans la boîte de dialogue contextuelle, donnez-lui un nom, tel que DataSetProducts.xsd, puis cliquez sur le bouton "Ajouter". À ce stade, l'outil de configuration TableAdapter apparaîtra automatiquement. S'il n'apparaît pas ou s'il est fermé par erreur, cliquez avec le bouton droit n'importe où dans le concepteur DataSet, sélectionnez Ajouter, puis sélectionnez TableAdapter, et l'outil réapparaîtra. Créez un DataTable selon l'assistant, sélectionnez « Procédures stockées existantes de l'utilisateur » comme type de commande dans l'interface qui apparaît, puis spécifiez « ShowProductByCategory » comme commande Select.
La procédure stockée créée lors de la première étape devient un DataTable lors de la deuxième étape et les données du rapport sont fournies via ce DataTable.
Figure 1 : DataSetProducts.xsd contenant un DataTable est la source de données du rapport
Étape 3 : Créez un fichier de rapport.
Cliquez avec le bouton droit dans le gestionnaire de solutions et sélectionnez Ajouter un nouvel élément, puis sélectionnez Modèle de rapport. Dans cet exemple, le nom par défaut Report.rdlc est utilisé directement. RDL signifie langage de définition de rapport et c signifie client. En d'autres termes, rdl est un rapport de serveur et rdlc est un rapport local.
Faites glisser le tableau de la boîte à outils vers le formulaire de conception de rapport. Ce « tableau » comporte trois parties : en-tête, contenu et queue. Une table est une zone qui affiche des données, et une zone affiche les éléments de données sous le DataSet auquel elle est liée. Bien qu'un rapport puisse comporter plusieurs zones, chaque zone ne peut afficher que le contenu d'un seul DataSet. Sur cette base, nous pouvons utiliser des procédures stockées pour combiner les données de plusieurs tables dans un DataSet afin de remplir les rapports.
Figure 2 : Contrôles de la barre d'outils dédiée aux modèles de rapports
Ouvrez la fenêtre « Source de données du site Web » et recherchez l'ensemble de données « DataSetProducts », qui est celui créé lors de la deuxième étape. Développez jusqu'à ce que vous voyiez le DataTable appelé "ShowProductByCategory". Cette table porte ce nom car nous avons précédemment sélectionné « Utiliser la procédure stockée existante » dans l'assistant de configuration de TableAdapter et le nom de notre procédure stockée est ShowProductByCategory.
Dans la fenêtre de la source de données du site Web, faites glisser ProductName, UnitPrice et UnitsInStock vers la ligne affichant les détails dans le concepteur de rapport, c'est-à-dire les première, deuxième et troisième colonnes de la ligne du milieu. Et vous pouvez cliquer avec le bouton droit sur n'importe quel champ de la ligne des détails d'affichage, puis rechercher l'onglet Format dans la barre de propriétés pour définir leur format d'affichage pour le prix unitaire et l'unité en stock.
Figure 3. Le formulaire de source de données du site Web affiche les DataSets définis dans votre programme et les colonnes dont ils disposent.
Étape 4 : ajoutez le contrôle ReportViewer à la page ASP.NET2.0
. Faites d'abord glisser le contrôle DropDownList dans le formulaire, puis liez le champ CategoryName dans Catégories en sélectionnant l'option de source de données. Dans d'autres scénarios, les utilisateurs peuvent saisir des paramètres via d'autres méthodes telles que des zones de texte, puis les transmettre à la procédure stockée.
Ensuite, faites glisser le contrôle Report View sur le formulaire et définissez sa propriété Visible sur False. Une autre chose à noter est que la visionneuse de rapports d'ASP.NET 2.0 fournit des méthodes d'exportation Excel et PDF. Cependant, au cours du processus, j'ai constaté qu'il y aurait toujours une légère différence entre le rapport imprimé et la façon dont vous l'avez conçu.
Figure 4, définissez cette page sur la page de démarrage
Ensuite, appelez la balise active de Report Viewer et sélectionnez le fichier Report.rdlc que vous venez de créer.
Figure 5 : Combinez le fichier de définition de rapport dans le contrôle Report Viewer.
Étape 5 : Écrivez du code pour permettre aux utilisateurs de sélectionner différents noms dans la liste déroulante, puis d'afficher différentes données dans le rapport.
N'oubliez pas d'ajouter l'espace de noms Microsoft.Reporting.WebForms à votre code-behind (ou fichier de code). déposer.
1
en utilisant le système ;
2en utilisant System.Data ;
3en utilisant System.Data.SqlClient ;
4en utilisant System.Configuration ;
5en utilisant System.Collections ;
6en utilisant System.Web ;
7en utilisant System.Web.Security ;
8en utilisant System.Web.UI ;
9en utilisant System.Web.UI.WebControls ;
10en utilisant System.Web.UI.WebControls.WebParts ;
11en utilisant System.Web.UI.HtmlControls ;
12en utilisant Microsoft.ApplicationBlocks.Data ;
13en utilisant Microsoft.Reporting.WebForms ;
14
15classe partielle publique ReportViewerLocalMode : System.Web.UI.Page
16{
17 chaîne publique thisConnectionString =
18 ConfigurationManager.ConnectionStrings[
19 "NorthwindConnectionString"].ConnectionString;
20
21 /**//*J'ai utilisé la déclaration suivante pour montrer si vous en avez plusieurs
22 paramètres d'entrée, déclarez le paramètre avec le numéro
23 paramètres dans votre application, ex. New SqlParameter[4] ;
vingt-quatre
25 public SqlParameter[] SearchValue = new SqlParameter[1];
26
27 void protégé RunReportButton_Click (expéditeur de l'objet, EventArgs e)
28 {
29 //ReportViewer1.Visible est défini sur false en mode conception
30 ReportViewer1.Visible = vrai ;
31 SqlConnection thisConnection = new SqlConnection(thisConnectionString);
32 System.Data.DataSet thisDataSet = new System.Data.DataSet();
33 SearchValue[0] = new SqlParameter("@CategoryName",
34 DropDownList1.SelectedValue);
35
36 /**//* Placer le résultat de la procédure stockée dans un ensemble de données */
37 thisDataSet = SqlHelper.ExecuteDataset (thisConnection,
38 "ShowProductByCategory", SearchValue);
39
40 /**//*ou thisDataSet = SqlHelper.ExecuteDataset(thisConnection,
41 "ShowProductByCategory", dropdownlist1.selectedvalue);
42 si vous n'avez qu'un seul paramètre d'entrée */
43
44 /**//* Associer thisDataSet (maintenant chargé avec le stocké
45 résultat de la procédure) avec la source de données ReportViewer */
46 Source de données ReportDataSource = nouvelle
47 RapportDataSource("DataSetProducts_ShowProductByCategory",
48 thisDataSet.Tables[0]);
49
50 ReportViewer1.LocalReport.DataSources.Clear();
51 ReportViewer1.LocalReport.DataSources.Add(source de données);
52 si (thisDataSet.Tables[0].Rows.Count == 0)
53 {
54 lblMessage.Text = "Désolé, aucun produit dans cette catégorie !";
55 }
56
57 ReportViewer1.LocalReport.Refresh();
58 }
59
Étape 6 : Pour exécuter le rapport,
appuyez sur la touche F5 et cliquez sur le bouton « Exécuter le rapport » pour exécuter le rapport.
Figure 6, rapport en cours d'exécution
Enfin, assurez-vous que ReportViewer est introduit sur le site Web et configurez le fichier web.config. Il peut être au format suivant :
type="Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=8.0.0.0, Culture=neutral, PublicKeyToken=?? ???????????" validate="false" /> Lors du déploiement d'un projet de site Web avec le contrôle ReportViewer sur un autre serveur, vous devez copier le fichier C:Program FilesMicrosoft Visual Studio 8SDKv2.0BootStrapperPackagesReportViewerReportViewer.exe puis l'exécuter sur le serveur. serveur cible. Expérience de traduction : Il semble que ce soit la traduction la plus simple que j'ai jamais faite, mais c'est peut-être parce que l'auteur a dit qu'elle était relativement concise et claire. Expérience d'apprentissage : l'auteur a développé deux méthodes de reporting acceptables pour ReportViewer et a effectué une analyse simple. Cependant, dans les projets réels, davantage de personnes peuvent utiliser le mode serveur et produire des rapports ni trop volumineux ni trop complexes. Je sais qu'il y a des gens dans l'entreprise qui se spécialisent en RS. On dit que cela prend une semaine pour le faire, cela dépend de la qualité de l'écriture, c'est normal, et si cela dépasse trente minutes, vous devrez peut-être envisager de changer l'algorithme. Cela semble effrayant, haha, mais si cela peut être utilisé pour les besoins de reporting du département photovoltaïque en bas, je veux être plus à l'aise que la méthode précédente GridView vers Excel. Si cela peut être recherché et compris, je prévois de réaliser une explication vidéo d'introduction spéciale pour aider davantage de personnes à comprendre ce contrôle.