Verwenden des ReportViewer-Steuerelements in ASP.NET 2.0
Autor:Eve Cole
Aktualisierungszeit:2009-07-01 16:43:40
Übersetzung dieses Artikels: webabcd
einführen
Eine häufige Anforderung für jede datengesteuerte Anwendung ist die Berichterstellung. Diese sehr wichtige Funktion steht uns jedoch in ASP.NET 1.x nicht zur Verfügung. Glücklicherweise kann das mit .NET 2.0 gelieferte ReportViewer-Steuerelement jedoch einige Ihrer grundlegenden Anforderungen an Berichte erfüllen. In diesem Artikel zeige ich Ihnen, wie Sie dieses Steuerelement verwenden. Das ReportViewer-Steuerelement kann sowohl in Webprogrammen als auch in Windows-Programmen verwendet werden. Hier werde ich nur die Verwendung in Webprogrammen vorstellen.
Beispielbericht
Wir gehen davon aus, dass wir eine Kundeninformationsliste wie unten dargestellt erstellen möchten:
Der obige Bericht ist eine sehr einfache Liste von Kundeninformationen, gruppiert nach Ländern. Die Daten für den Bericht werden aus der Tabelle „Customers“ der Northwind-Datenbank abgerufen. Standardmäßig werden alle Kundeninformationen angezeigt. Sie können jedoch auch Informationen über Kunden anzeigen lassen, die einem von Ihnen angegebenen Land angehören.
Der Bericht wird mithilfe des ReportViewer-Steuerelements entworfen, das Daten aus einem stark typisierten DataSet oder einer benutzerdefinierten Objektsammlung abrufen kann. Bei der eigentlichen Programmentwicklung verwenden wir häufig eine dreistufige Architektur, und die erhaltenen Daten sind häufig ein DataSet oder eine generische Sammlung, die aus der Geschäftsschicht abgerufen wird. Hier habe ich vor, eine generische Sammlung als Datenquelle anstelle eines stark typisierten DataSets zu verwenden.
Erstellen Sie eine Klassenbibliothek
Öffnen Sie zunächst Visual Studio und erstellen Sie ein Klassenbibliotheksprojekt mit dem Namen ReportViewerLib. Fügen Sie eine Klasse mit dem Namen „Customer“ hinzu, wie unten gezeigt:
Verwenden des Systems; Verwenden von System.Data; Verwenden von System.Configuration; Verwenden von System.Data.SqlClient; mit System.Collections.Generic; Namespace ReportViewerLib { öffentliche KlasseCustomer { öffentliche Zeichenfolge strCustomerID; öffentliche Zeichenfolge strCompanyName; öffentliche Zeichenfolge strContactName; öffentliche Zeichenfolge strCountry;
öffentliche Zeichenfolge CustomerID { erhalten { return strCustomerID; } Satz { strCustomerID = Wert; } }
öffentliche Zeichenfolge CompanyName { erhalten { return strCompanyName; } Satz { strCompanyName= value; } }
öffentliche Zeichenfolge ContactName { erhalten { return strContactName; } Satz { strContactName= Wert; } }
öffentliche Zeichenfolge Land { erhalten { return strCountry; } Satz { strCountry= Wert; } }
öffentliche statische Liste |
GetCustomersForCountry(string Land) { SqlConnection cnn=new SqlConnection( ConfigurationManager.ConnectionStrings["NorthwindConnectionString"].ConnectionString); SqlCommand cmd=new SqlCommand(); cmd.Connection=cnn; cmd.CommandText="select Kunden-ID, Firmenname, Kontaktname, Land von Kunden, bei denen country=@country"; SqlParameter p=neuer SqlParameter ("@country",country); cmd.Parameters.Add(p); cnn.Open(); SqlDataReader reader = cmd.ExecuteReader(); Liste |
(); while (reader.Read()) { Kunde c = neuer Kunde(); c.CustomerID = reader.GetString(0); c.CompanyName = reader.GetString(1); c.ContactName = reader.GetString(2); c.Country = reader.GetString(3); list.Add(c); } cnn.Close(); Rückgabeliste; }
öffentliche statische Liste |
GetAllCustomers() { SqlConnection cnn = new SqlConnection( ConfigurationManager.ConnectionStrings ["NorthwindConnectionString"].ConnectionString); SqlCommand cmd = new SqlCommand(); cmd.Connection = cnn; cmd.CommandText = "select Kunden-ID, Firmenname, Kontaktname, Land von Kunden“; cnn.Open(); SqlDataReader reader = cmd.ExecuteReader(); Liste |
(); while (reader.Read()) { Kunde c = neuer Kunde(); c.CustomerID = reader.GetString(0); c.CompanyName = reader.GetString(1); c.ContactName = reader.GetString(2); c.Country = reader.GetString(3); list.Add(c); } cnn.Close(); Rückgabeliste; }
} }
|
Die Customer-Klasse definiert vier öffentliche Eigenschaften, nämlich CustomerID, CompanyName, ContactName und Country. Danach sind in dieser Klasse zwei statische Methoden enthalten – GetCustomersForContry() und GetAllCustomers(). Diese beiden Methoden sind relativ einfach. Die eine gibt alle Kundeninformationen zurück, die zu einem bestimmten Land gehören, und die andere gibt alle Kundeninformationen zurück. Öffnen Sie zunächst die Verbindung zur Northwind-Datenbank und führen Sie dann die SELECT-Abfrage über das SqlCommand-Objekt aus. Verwenden Sie anschließend das SqlDataReader-Objekt, um die Daten abzurufen. Durchlaufen Sie dieses SqlDataReader-Objekt, erstellen Sie darin jedes Mal ein Kundenobjekt, legen Sie dann seine verschiedenen Eigenschaften fest und fügen Sie es schließlich der generischen Sammlung von Kundenobjekten hinzu. Am Ende der Klasse wird die generische Sammlung von Kundenobjekten an den Aufrufer zurückgegeben.
Datenquelle erstellen
Wenn Sie einen Bericht entwerfen, müssen Sie in Ihrem Projekt eine Datenquelle dafür angeben. Um Ihrem Projekt eine Datenquelle hinzuzufügen, können Sie dies tun, indem Sie das Menü „Daten“ -> „Neue Datenquelle hinzufügen“ auswählen. Dann erscheint das unten abgebildete Dialogfenster:
Ihre Datenquelle kann eine Datenbank, ein Webdienst oder ein Objekt sein. In diesem Fall haben wir Objekt ausgewählt. Klicken Sie dann auf die Schaltfläche „Weiter“ und eine Schnittstelle zur Auswahl einer Datenquelle wird angezeigt. Wir haben die Klasse „Customer“ gewählt (wie in der Abbildung unten gezeigt).
Klicken Sie auf die Schaltfläche „Fertig stellen“, um den Datenquellen-Konfigurationsassistenten abzuschließen. Auf diese Weise haben Sie Ihrer Klassenbibliothek eine neue Datenquelle hinzugefügt. Wenn Sie die Datenquelle anzeigen möchten, können Sie dies tun. Wählen Sie das Menü „Daten“ -> Datenquelle anzeigen. Die unten gezeigte Oberfläche wird angezeigt:
Designberichte
Als nächstes fügen Sie einen Bericht hinzu. Klicken Sie mit der rechten Maustaste auf das Projekt und wählen Sie „Neues Element hinzufügen“. Wählen Sie im Dialogfeld „Bericht“ und klicken Sie auf die Schaltfläche „Hinzufügen“ (wie in der Abbildung unten dargestellt). Auf diese Weise haben wir eine Datei mit dem Namen „Report1.rdlc“ hinzugefügt. Die .rdlc-Datei ist eine Berichtsdatei, die das Berichtslayout und die Datenzuordnung speichert.
Sobald Sie die Datei „Report1.rdlc“ öffnen, wird eine Reihe berichtsbezogener Steuerelemente in der Visual Studio-Toolbox angezeigt (wie unten gezeigt).
Unter diesen Steuerelementen werden das „Textfeld“-Steuerelement und das „Tabellen“-Steuerelement sehr häufig verwendet. Das Steuerelement „Textfeld“ wird verwendet, um einen statischen Text oder einen Ausdruck anzuzeigen. Das Steuerelement „Tabelle“ wird zur Anzeige tabellarischer Daten verwendet und die dadurch generierten Ergebnisse werden im „Hauptteil“ Ihres Berichts angezeigt.
Der entworfene Bericht ist unten dargestellt:
Am Kopf des Abschnitts „Kopfzeile“ des Berichts befindet sich ein Textfeld, dessen Werteigenschaft „Kundenliste“ lautet. Unter diesem Textfeld befindet sich ein weiteres Textfeld, und der Wert seiner Value-Eigenschaft ist „=Parameters!SubTitle.Value“. Dies bedeutet, dass der Wert des Textfelds vom Parameter SubTitle stammt. Wie definieren wir Parameter? Dazu müssen Parameter in der ReportParameters-Eigenschaft des Berichts hinzugefügt werden. Das geöffnete Dialogfeld „Berichtsparameter“ ist in der folgenden Abbildung dargestellt:
Bitte beachten Sie: Die Einstellung der Parameter erfolgt in unserem .NET-Code.
Wenn Sie das Datum im Bericht anzeigen möchten, setzen Sie einfach die Value-Eigenschaft des entsprechenden Textfelds auf „=FormatDateTime(ToDay(),DateFormat.ShortDate)“. Einer der großen Vorteile von Berichten besteht darin, dass sie über viele integrierte Funktionen verfügen, beispielsweise ToDay() und FormatDateTime. In diesem Beispiel verwenden wir die Funktion FormatDateTime(), um das aktuelle Datum (ToDay()) im ShortDate-Format anzuzeigen.
Ziehen Sie nun ein „Tabellen“-Steuerelement aus der Toolbox auf Ihren Bericht. Standardmäßig verfügt das Steuerelement „Tabelle“ über 3 Zeilen und 3 Spalten. Die 3 Zeilen sind: Tabellenkopf, Detailinformationen und Tabellenfuß. Natürlich können Sie dem Tabellensteuerelement auch Zeilen und Spalten hinzufügen. Ziehen Sie die Eigenschaften „CustomerID“, „CompanyName“, „ContactName“ und „Country“ aus dem Datenquellenfenster in die Detailzeile Ihres Tabellensteuerelements. Auf diese Weise fügt das System automatisch ein Textfeld hinzu und setzt seine Eigenschaften auf =Fields!CustomerID.Value, =Fields!CompanyName.Value usw. An dieser Stelle werden auch automatisch Spaltenüberschriften hinzugefügt. Natürlich können Sie auch die nötigen Modifikationen entsprechend Ihren Bedürfnissen vornehmen.
Als Nächstes möchten wir die Datensätze nach dem Land gruppieren, zu dem der Kunde gehört. Klicken Sie mit der rechten Maustaste auf den Rand der Detailzeile und wählen Sie Gruppe einfügen (wie im Bild unten gezeigt).
Dann erscheint das unten abgebildete Dialogfenster:
Wählen Sie im Reiter „Sortieren“ als Ausdruck „=Felder!Land.Wert“ und als Sortierrichtung „Aufsteigend“ aus.
Das sind die Dinge, ganz einfach. Damit haben wir die Gestaltung des Berichts abgeschlossen.
Bericht anzeigen
Erstellen Sie eine neue Website mit dem Namen „ReportViewerDemo“. Fügen Sie einen Verweis auf die ReportViewerLib-Assembly hinzu, damit die Assembly in das BIN-Verzeichnis Ihrer Website kopiert wird. Fügen Sie anschließend die Datei Report1.rdlc zu Ihrer Website hinzu. Ziehen Sie ein ReportViewer-Steuerelement auf der Registerkarte „Daten“ der Toolbox auf Ihre Seite „Default.aspx“, öffnen Sie das Smarttag-Panel des ReportViewer-Steuerelements und wählen Sie Report1.rdlc im Dropdown-Feld „Bericht auswählen“ aus, wie in der Abbildung gezeigt Abbildung unten:
Nach Auswahl der Berichtsdatei fügt das System automatisch ein Objektdatenquellen-Steuerelement mit der Eigenschaft „TypeName“ als „Kunde“ hinzu. Sie können dies im Konfigurationsassistenten der Objektdatenquellensteuerung überprüfen.
Ziehen Sie als Nächstes ein DropDownList-Steuerelement in die Kopfzeile der Seite und legen Sie vier Optionen dafür fest: „Alle“, „USA“, „Großbritannien“ und „Brasilien“. Setzen Sie außerdem seine AutoPostBack-Eigenschaft auf True. Öffnen Sie dann den Konfigurationsassistenten der Datenquellensteuerung und legen Sie die Operation „SELECT“ auf die Methode SelectCustomersForCountry() fest.
Legen Sie den Länderparameter der SelectCustomersForCountry()-Methode auf den SelectedValue von DropDownList1 fest.
Standardmäßig werden alle Kundeninformationen im Bericht angezeigt. Wenn Sie in der DropDownList ein Land auswählen, werden die Kundeninformationen des von Ihnen ausgewählten Landes im Bericht angezeigt. Um eine solche Funktion abzuschließen, müssen wir nur das SelectedIndexChanged-Ereignis von DropDownList verarbeiten.
protected void DropDownList1_SelectedIndexChanged (Objektsender, EventArgs e) { if (DropDownList1.SelectedValue == "All") { ObjectDataSource1.SelectMethod = "GetAllCustomers"; ObjectDataSource1.SelectParameters.Clear(); ReportParameter param = neuer ReportParameter („Untertitel“, „Liste aller Kunden“); ReportParameter[] p ={ param }; ReportViewer1.LocalReport.SetParameters(p); } anders { ObjectDataSource1.SelectMethod = "GetCustomersForCountry"; ObjectDataSource1.SelectParameters[0].DefaultValue = DropDownList1.SelectedValue;
ReportParameter param = neuer ReportParameter („Untertitel“, „Kundenliste für ein Land“); ReportParameter[] p ={ param }; ReportViewer1.LocalReport.SetParameters(p); } } |
Dieser Code überprüft zunächst die SelectedValue-Eigenschaft des DropDownList-Steuerelements. Wenn es „Alle“ ist, legen Sie die SelectMethod-Eigenschaft des Datenquellensteuerelements auf „GetAllCustomers“ fest. Darüber hinaus müssen wir auch die SelectParameters-Sammlung löschen, da die GetAllCustomers()-Methode keine Parameter erfordert. Als Nächstes erstellen wir eine Instanz der ReportParameter-Klasse und legen den Parameternamen und -wert des Berichts in seinem Konstruktor fest. Erinnern Sie sich an die Parameter, die wir beim Entwerfen des Berichts definiert haben. Erstellen Sie dann ein ReportParameter-Array. Rufen Sie die SetParameters()-Methode mit diesem Array als Parameter auf. Der Codeblock „else“ ist ebenfalls sehr einfach, dh die verwendete Methode wird zu GetCustomersForCountry ().
Das sind die Dinge, ganz einfach. Der Bericht ist fertiggestellt. Sie können die Seite „Default.aspx“ ausführen, um den Effekt zu sehen. Beachten Sie, dass das ReportViewer-Steuerelement über integrierte Exportfunktionen verfügt, mit denen Sie Berichte in das Excel- oder PDF-Format exportieren können. Das ReportViewer-Steuerelement verfügt außerdem über viele Eigenschaften, die Sie selbst erkunden können.
Zusammenfassen
Das ReportViewer-Steuerelement von ASP.NET stellt viele grundlegende Funktionen von Berichten bereit. In diesem Artikel verwenden wir die Objektdatenquellensteuerung, um einen Bericht zu entwickeln. Wir haben eine Klassenbibliothek und eine Datenquelle erstellt. Verwenden Sie abschließend das ReportViewer-Steuerelement, um den Bericht anzuzeigen.