Einleitung:
Dieser Artikel ist ein Link, der vorgestern von Kanyuanzi bereitgestellt wurde. Ich habe vergessen, wem er gehört. Ich erinnere mich nur daran, dass die Adresse http://www.codeproject.com/aspnet/ReportViewer.asp veröffentlicht wurde sagte das, weil es aus irgendeinem Grund nicht übersetzt wurde. Ich habe später einen Blick darauf geworfen und es hat sich für mich als nützlich erwiesen, da jemand in der Firma an RS-Sachen arbeitete und die Optoelektronik-Abteilung unten auch oft Blödsinnsbedarf hatte, den ich schon lange kannte, aber noch nie hatte Zeit, ihn zu studieren, also habe ich diesen Artikel zufällig gefunden. Also habe ich ihn den ganzen Nachmittag sorgfältig studiert, ihn zuerst übersetzt und dann einige Erkenntnisse hinzugefügt.
Während des Übersetzungsprozesses habe ich versucht, es so weit wie möglich zu lokalisieren, aber die Bedeutung des ursprünglichen Autors beibehalten. Sollte es in der Übersetzung Ungenauigkeiten geben, kritisieren und korrigieren Sie mich bitte.
Es gibt viele Servicemodi (Servermodus) von SqlServer RS im Internet, und ich habe wirklich lange damit verbracht, den lokalen Modus (Lokalmodus) zu studieren, insbesondere wenn es Parameteraufrufe gibt.
Der Grund, warum der lokale Modus anstelle des Servermodus verwendet wird, liegt darin, dass der Server jedes Mal, wenn der Client im Servicemodus einen Bericht anfordert, die Daten in einem Bericht organisieren und ihn dann an den Client senden muss. Dies ist jedoch sicherer, der große Bericht ist jedoch sicherer Die Übertragung vom Server zum Browser verringert die Leistung.
In diesem Artikel wird beschrieben, wie Sie einen Bericht mithilfe des ReportViewer-Steuerelements von ASP.NET2.0 organisieren und lesen. Hier wählen wir den lokalen Modus und verwenden eine gespeicherte Prozedur mit Parametern. Ich verwende ASP.NET2.0, VisualStudio2005 und SQLServer2005 plus Application Block. Wenn Sie nicht über das Microsoft Application Block-Tool verfügen, ersetzen Sie bitte den Code, der die gespeicherte Prozedur über SQL Helper im Beispiel aufruft, durch SQL Command.
Hier wählen wir die Northwind-Datenbank aus. Unser Beispiel zeigt, wie der Benutzer den Produktnamen aus der Dropdown-Liste auswählt und dann die Informationen im Bericht herausfiltert.
Der erste Schritt besteht darin, eine gespeicherte ProzedurALTER PROCEDURE ShowProductByCategory(@CategoryName nvarchar(15) )
mit den Parametern
AS
SELECT Kategorien.CategoryName, Products.ProductName,
Products.UnitPrice, Products.UnitsInStock
FROM Kategorien INNER JOIN Products ON
Kategorien.CategoryID = Products
zu erstellen. CategoryID
WHERE CategoryName=@CategoryName
RETURN
Der zweite Schritt besteht darin, mit dem DataSet-Designer eine DataTable unter dem DataSet zu erstellen.
Klicken Sie mit der rechten Maustaste auf die App_Code-Datei und wählen Sie „Neues Element hinzufügen“. Wählen Sie im Popup-Dialogfeld „DataSet“ aus, geben Sie ihm einen Namen, z. B. DataSetProducts.xsd, und klicken Sie dann auf die Schaltfläche „Hinzufügen“. Zu diesem Zeitpunkt wird das TableAdapter-Konfigurationstool automatisch angezeigt. Wenn es nicht angezeigt wird oder versehentlich geschlossen wird, klicken Sie mit der rechten Maustaste auf eine beliebige Stelle im DataSet-Designer, wählen Sie „Hinzufügen“ und dann „TableAdapter“ aus. Das Tool wird erneut angezeigt. Erstellen Sie gemäß dem Assistenten eine Datentabelle, wählen Sie in der angezeigten Benutzeroberfläche als Befehlstyp „Benutzer vorhandener gespeicherter Prozeduren“ aus und geben Sie dann „ShowProductByCategory“ als Auswahlbefehl an.
Die im ersten Schritt erstellte gespeicherte Prozedur wird im zweiten Schritt zu einer DataTable, und die Berichtsdaten werden über diese DataTable bereitgestellt.
Abbildung 1: DataSetProducts.xsd mit einer DataTable ist die Datenquelle des Berichts
Schritt 3: Erstellen Sie eine Berichtsdatei.
Klicken Sie mit der rechten Maustaste in den Lösungsmanager, wählen Sie „Neues Element hinzufügen“ und dann „Berichtsvorlage“. In diesem Beispiel wird direkt der Standardname Report.rdlc verwendet. RDL bedeutet Berichtsdefinitionssprache und c bedeutet Client. Mit anderen Worten, rdl ist ein Serverbericht und rdlc ist ein lokaler Bericht.
Ziehen Sie die Tabelle aus der Toolbox in das Berichtsentwurfsformular. Diese „Tabelle“ besteht aus drei Teilen: Kopfzeile, Inhalt und Ende. Eine Tabelle ist ein Bereich, der Daten anzeigt, und ein Bereich zeigt die Datenelemente unter dem DataSet an, an das er gebunden ist. Obwohl ein Bericht viele Bereiche haben kann, kann jeder Bereich nur den Inhalt eines DataSets anzeigen. Auf dieser Grundlage können wir gespeicherte Prozeduren verwenden, um Daten aus mehreren Tabellen in einem DataSet zu kombinieren, um Berichte zu füllen.
Abbildung 2: Steuerelemente in der Symbolleiste für Berichtsvorlagen
Öffnen Sie das Fenster „Website-Datenquelle“ und suchen Sie den Datensatz „DataSetProducts“, der im zweiten Schritt erstellt wurde. Erweitern Sie, bis Sie die DataTable mit dem Namen „ShowProductByCategory“ sehen. Diese Tabelle trägt diesen Namen, weil wir zuvor im TableAdapter-Konfigurationsassistenten „Vorhandene gespeicherte Prozedur verwenden“ ausgewählt haben und der Name unserer gespeicherten Prozedur ShowProductByCategory ist.
Ziehen Sie im Fenster der Website-Datenquelle ProductName, UnitPrice und UnitsInStock in die Zeile mit den Details im Berichtsdesigner, d. h. in die erste, zweite und dritte Spalte der mittleren Zeile. Und Sie können mit der rechten Maustaste auf ein beliebiges Feld in der Zeile mit den Anzeigedetails klicken und dann in der Eigenschaftsleiste die Registerkarte „Format“ finden, um deren Anzeigeformat für „Stückpreis“ und „Stück auf Lager“ zu definieren.
Abbildung 3. Das Website-Datenquellenformular zeigt die in Ihrem Programm definierten DataSets und die darin enthaltenen Spalten.
Schritt 4: Fügen Sie das ReportViewer-Steuerelement zur ASP.NET2.0-Seite hinzu
. Ziehen Sie zunächst das DropDownList-Steuerelement in das Formular und binden Sie dann das CategoryName-Feld in Kategorien, indem Sie die Datenquellenoption auswählen. In anderen Szenarien können Benutzer Parameter über andere Methoden wie Textfelder eingeben und sie dann an die gespeicherte Prozedur übergeben.
Ziehen Sie dann das Steuerelement „Berichtsansicht“ auf das Formular und setzen Sie seine Visible-Eigenschaft auf „False“. Zu beachten ist außerdem, dass der Report Viewer von ASP.NET 2.0 Excel- und PDF-Exportmethoden bereitstellt. Während des eigentlichen Prozesses habe ich jedoch festgestellt, dass es immer eine leichte Diskrepanz zwischen dem gedruckten Bericht und der Art und Weise geben wird, wie Sie ihn entworfen haben.
Abbildung 4: Stellen Sie diese Seite auf die Startseite ein
Rufen Sie als Nächstes den Smarttag des Report Viewers auf und wählen Sie die soeben erstellte Datei Report.rdlc aus.
Abbildung 5: Kombinieren Sie die Berichtsdefinitionsdatei im Report Viewer-Steuerelement.
Schritt 5: Schreiben Sie Code, um Benutzern die Auswahl verschiedener Namen im Dropdown-Feld und die Anzeige verschiedener Daten im Bericht zu ermöglichen.
Vergessen Sie nicht, den Namespace Microsoft.Reporting.WebForms zu Ihrem CodeBehind (oder Ihrer Codedatei) hinzuzufügen. Datei.
1
using System;
2using System.Data;
3using System.Data.SqlClient;
4using System.Configuration;
5mit System.Collections;
6mit System.Web;
7mit System.Web.Security;
8mit System.Web.UI;
9using System.Web.UI.WebControls;
10using System.Web.UI.WebControls.WebParts;
11using System.Web.UI.HtmlControls;
12using Microsoft.ApplicationBlocks.Data;
13mit Microsoft.Reporting.WebForms;
14
15öffentliche Teilklasse ReportViewerLocalMode: System.Web.UI.Page
16{
17 öffentliche Zeichenfolge thisConnectionString =
18 ConfigurationManager.ConnectionStrings[
19 „NorthwindConnectionString“].ConnectionString;
20
21 /**//*Ich habe die folgende Anweisung verwendet, um zu zeigen, ob Sie mehrere haben
22 Eingabeparameter, deklarieren Sie den Parameter mit der Nummer
23 Parameter in Ihrer Anwendung, z. B. New SqlParameter[4];
vierundzwanzig
25 public SqlParameter[] SearchValue = new SqlParameter[1];
26
27 protected void RunReportButton_Click(object sender, EventArgs e)
28 {
29 //ReportViewer1.Visible ist im Entwurfsmodus auf „false“ gesetzt
30 ReportViewer1.Visible = true;
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 /**//* Das Ergebnis der gespeicherten Prozedur in einen Datensatz einfügen */
37 thisDataSet = SqlHelper.ExecuteDataset(thisConnection,
38 „ShowProductByCategory“, SearchValue);
39
40 /**//*or thisDataSet = SqlHelper.ExecuteDataset(thisConnection,
41 „ShowProductByCategory“, dropdownlist1.selectedvalue);
42 wenn Sie nur 1 Eingabeparameter haben */
43
44 /**//* Verknüpfen Sie dieses DataSet (jetzt geladen mit dem gespeicherten
45 Verfahrensergebnis) mit der ReportViewer-Datenquelle */
46 ReportDataSource Datenquelle = neu
47 ReportDataSource("DataSetProducts_ShowProductByCategory",
48 thisDataSet.Tables[0]);
49
50 ReportViewer1.LocalReport.DataSources.Clear();
51 ReportViewer1.LocalReport.DataSources.Add(datasource);
52 if (thisDataSet.Tables[0].Rows.Count == 0)
53 {
54 lblMessage.Text = "Leider keine Produkte in dieser Kategorie!";
55 }
56
57 ReportViewer1.LocalReport.Refresh();
58 }
59
Schritt 6: Um den Bericht auszuführen,
drücken Sie die Taste F5 und klicken Sie auf die Schaltfläche „Bericht ausführen“, um den Bericht auszuführen.
Abbildung 6, laufender Bericht
Stellen Sie abschließend sicher, dass ReportViewer in die Website eingeführt wird, und konfigurieren Sie die Datei web.config. Sie kann im folgenden Format vorliegen:
type="Microsoft.Reporting.WebForms.HttpHandler, Microsoft.ReportViewer.WebForms, Version=8.0.0.0, Culture=neutral, PublicKeyToken=?? ??????????" validieren="false" /> Wenn Sie ein Website-Projekt mit ReportViewer-Steuerung auf einem anderen Server bereitstellen, müssen Sie die Datei C:ProgrammeMicrosoft Visual Studio 8SDKv2.0BootStrapperPackagesReportViewerReportViewer.exe kopieren und dann auf dem Server ausführen Zielserver. Übersetzungserfahrung: Es scheint, dass dies die einfachste Übersetzung ist, die ich je gemacht habe, aber es kann daran liegen, dass der Autor sagte, sie sei relativ prägnant und klar. Lernerfahrung: Der Autor erläuterte zwei für ReportViewer akzeptable Berichtsmethoden und führte eine einfache Analyse durch. In tatsächlichen Projekten können jedoch mehrere Benutzer den Servermodus verwenden, um einige Berichte zu erstellen, die nicht zu groß oder zu komplex sind. Ich weiß, dass es Leute in der Firma gibt, die sich auf RS spezialisiert haben. Beim Laufen kommt es auf die Qualität des Schreibens an. Zehn Minuten sind normal, und wenn es mehr als dreißig Minuten sind. Möglicherweise müssen Sie eine Änderung des Algorithmus in Betracht ziehen. Es klingt beängstigend, haha, aber wenn es für die Berichtsanforderungen der Photovoltaik-Abteilung unten verwendet werden kann, möchte ich komfortabler sein als die vorherige GridView-zu-Excel-Methode. Wenn dies recherchiert und verstanden werden kann, plane ich, ein spezielles Einführungsvideo mit Erklärungen zu erstellen, um mehr Menschen das Verständnis dieser Steuerung zu erleichtern.