Programmgesteuertes Festlegen der Parameterwerte des ObjectDataSource-Steuerelements (C#)
von Scott Mitchell
In diesem Tutorial untersuchen wir das Hinzufügen einer Methode zu unserer DAL und BLL, die einen einzelnen Eingabeparameter akzeptiert und Daten zurückgibt. Im Beispiel wird dieser Parameter programmgesteuert festgelegt.
Einführung
Wie im vorherigen Tutorial gezeigt, stehen eine Reihe von Optionen zum deklarativen Übergeben von Parameterwerten an die Methoden von ObjectDataSource zur Verfügung. Wenn der Parameterwert hartcodiert ist, von einem Websteuerelement auf der Seite stammt oder sich in einer anderen Quelle befindet, die von einem Datenquellenobjekt Parameter
lesbar ist, z. B. kann dieser Wert an den Eingabeparameter gebunden werden, ohne eine Codezeile zu schreiben.
Es kann jedoch vorkommen, dass der Parameterwert aus einer Quelle stammt, die nicht bereits von einem der integrierten Datenquellenobjekte Parameter
erfasst wurde. Wenn unsere Website Benutzerkonten unterstützt, können wir den Parameter basierend auf der Benutzer-ID des aktuell angemeldeten Besuchers festlegen. Oder wir müssen den Parameterwert anpassen, bevor wir ihn an die Methode des zugrunde liegenden ObjectDataSource-Objekts senden.
Wenn die ObjectDataSource-Methode Select
aufgerufen wird, löst die ObjectDataSource zuerst das Selecting-Ereignis aus. Anschließend wird die Methode des zugrunde liegenden ObjectDataSource-Objekts aufgerufen. Sobald dies abgeschlossen ist, wird das Selected-Ereignis von ObjectDataSource ausgelöst (Abbildung 1 veranschaulicht diese Ereignissequenz). Die Parameterwerte, die an die Methode des zugrunde liegenden ObjectDataSource-Objekts übergeben werden, können in einem Ereignishandler für das Selecting
Ereignis festgelegt oder angepasst werden.
Abbildung 1: Die ObjectDataSource- Selected
und Selecting
-Ereignisse werden vor und nach der Methode des zugrunde liegenden Objekts aufgerufen (Klicken Sie hier, um das bild in voller Größe anzuzeigen)
In diesem Tutorial untersuchen wir das Hinzufügen einer Methode zu unserer DAL und BLL, die einen einzelnen Eingabeparameter Month
vom Typ int
akzeptiert und ein EmployeesDataTable
Objekt zurückgibt, das mit den Mitarbeitern aufgefüllt ist, deren Einstellungsjubiläum im angegebenen Month
ist. In unserem Beispiel wird dieser Parameter programmgesteuert basierend auf dem aktuellen Monat festgelegt, wobei eine Liste mit "Mitarbeiterjubiläen in diesem Monat" angezeigt wird.
Jetzt geht‘s los!
Schritt 1: Hinzufügen einer Methode zuEmployeesTableAdapter
Für unser erstes Beispiel müssen wir eine Methode hinzufügen, um die Mitarbeiter abzurufen, deren HireDate
Auftreten in einem angegebenen Monat erfolgt ist. Um diese Funktionalität in Übereinstimmung mit unserer Architektur bereitzustellen, müssen wir zuerst eine Methode in EmployeesTableAdapter
erstellen, die der richtigen SQL-Anweisung zugeordnet ist. Öffnen Sie dazu zunächst das Northwind Typed DataSet. Klicken Sie mit der rechten Maustaste auf die EmployeesTableAdapter
Bezeichnung, und wählen Sie Abfrage hinzufügen aus.
Abbildung 2: Hinzufügen einer neuen Abfrage zu (Klicken Sie hier, um dasEmployeesTableAdapter
bild in voller Größe anzuzeigen)
Wählen Sie aus, um eine SQL-Anweisung hinzuzufügen, die Zeilen zurückgibt. Wenn Sie den Bildschirm Anweisung angeben SELECT
erreichen, wird die Standard-Anweisung SELECT
für die EmployeesTableAdapter
bereits geladen. Fügen Sie einfach die WHERE
-Klausel hinzu: WHERE DATEPART(m, HireDate) = @Month
. DATEPART ist eine T-SQL-Funktion, die einen bestimmten Datumsteil eines datetime
Typs zurückgibt. In diesem Fall verwenden DATEPART
wir, um den Monat der HireDate
Spalte zurückzugeben.
@HiredBeforeDate Parameter" />
Abbildung 3: Zurückgeben nur der Zeilen, bei denen die HireDate
Spalte kleiner als oder gleich dem @HiredBeforeDate
Parameter ist (Klicken Sie hier, um das Bild in voller Größe anzuzeigen)
Ändern Sie schließlich die FillBy
Methodennamen und GetDataBy
in FillByHiredDateMonth
bzw GetEmployeesByHiredDateMonth
. .
Abbildung 4: Auswählen geeigneterer Methodennamen als FillBy
und GetDataBy
(Klicken Sie hier, um das bild in voller Größe anzuzeigen)
Klicken Sie auf Fertig stellen, um den Assistenten abzuschließen und zur Entwurfsoberfläche des DataSet zurückzukehren. Die EmployeesTableAdapter
sollte jetzt einen neuen Satz von Methoden für den Zugriff auf Mitarbeiter enthalten, die in einem angegebenen Monat eingestellt wurden.
Abbildung 5: Die neuen Methoden werden auf der Entwurfsoberfläche des DataSets angezeigt (Klicken Sie hier, um das bild in voller Größe anzuzeigen)
Schritt 2: Hinzufügen derGetEmployeesByHiredDateMonth(month)
Methode zur Geschäftslogikebene
Da unsere Anwendungsarchitektur eine separate Schicht für die Geschäftslogik und die Datenzugriffslogik verwendet, müssen wir unserer BLL eine Methode hinzufügen, die die DAL aufruft, um Mitarbeiter abzurufen, die vor einem angegebenen Datum eingestellt wurden. Öffnen Sie die EmployeesBLL.cs
Datei, und fügen Sie die folgende Methode hinzu:
[System.ComponentModel.DataObjectMethodAttribute
(System.ComponentModel.DataObjectMethodType.Select, false)]
public Northwind.EmployeesDataTable GetEmployeesByHiredDateMonth(int month)
{
return Adapter.GetEmployeesByHiredDateMonth(month);
}
Wie bei unseren anderen Methoden in dieser Klasse rufen GetEmployeesByHiredDateMonth(month)
Sie einfach die DAL auf und geben die Ergebnisse zurück.
Schritt 3: Anzeigen von Mitarbeitern, deren Einstellungsjubiläum diesen Monat ist
Unser letzter Schritt für dieses Beispiel besteht darin, die Mitarbeiter anzuzeigen, deren Einstellungsjubiläum diesen Monat ist. Fügen Sie zunächst eine GridView-Seite ProgrammaticParams.aspx
im BasicReporting
Ordner hinzu, und fügen Sie eine neue ObjectDataSource als Datenquelle hinzu. Konfigurieren Sie objectDataSource so, dass die EmployeesBLL
-Klasse verwendet wird, wobei der SelectMethod
Wert auf festgelegt ist GetEmployeesByHiredDateMonth(month)
.
Abbildung 6: Verwenden der EmployeesBLL
Klasse (Klicken Sie hier, um das bild in voller Größe anzuzeigen)
Abbildung 7: Wählen Sie Aus der GetEmployeesByHiredDateMonth(month)
-Methode aus (Klicken Sie hier, um das Bild in voller Größe anzuzeigen)
Auf dem letzten Bildschirm werden wir aufgefordert, die month
Quelle des Parameterwerts anzugeben. Da wir diesen Wert programmgesteuert festlegen, lassen Sie die Parameterquelle auf die Standardoption Keine festgelegt, und klicken Sie auf Fertig stellen.
Abbildung 8: Lassen Sie die Parameterquelle auf Keine festgelegt (Klicken Sie hier, um das Bild in voller Größe anzuzeigen).
Dadurch wird ein Parameter
Objekt in der ObjectDataSource-Auflistung SelectParameters
erstellt, für das kein Wert angegeben ist.
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server"
OldValuesParameterFormatString="original_{0}"
SelectMethod="GetEmployeesByHiredDateMonth" TypeName="EmployeesBLL">
<SelectParameters>
<asp:Parameter Name="month" Type="Int32" />
</SelectParameters>
</asp:ObjectDataSource>
Um diesen Wert programmgesteuert festzulegen, müssen wir einen Ereignishandler für das ObjectDataSource-Ereignis Selecting
erstellen. Um dies zu erreichen, wechseln Sie zur Entwurfsansicht, und doppelklicken Sie auf ObjectDataSource. Alternativ wählen Sie ObjectDataSource aus, wechseln Sie zum Eigenschaftenfenster, und klicken Sie auf das Blitzsymbol. Doppelklicken Sie als Nächstes entweder in das Textfeld neben dem Selecting
Ereignis, oder geben Sie den Namen des Ereignishandlers ein, den Sie verwenden möchten.
Abbildung 9: Klicken Sie im Eigenschaftenfenster auf das Blitzsymbol, um die Ereignisse eines Websteuerelements aufzulisten.
Beide Ansätze fügen der CodeBehind-Klasse der Seite einen neuen Ereignishandler für das ObjectDataSource-Ereignis Selecting
hinzu. In diesem Ereignishandler können wir die Parameterwerte mithilfe e.InputParameters[parameterName]
von lesen und schreiben, wobei parameterName
der Wert des Name
Attributs im <asp:Parameter>
Tag ist (die InputParameters
Auflistung kann auch ordinal indiziert werden, wie in e.InputParameters[index]
). Um den month
Parameter auf den aktuellen Monat festzulegen, fügen Sie dem Selecting
Ereignishandler Folgendes hinzu:
protected void ObjectDataSource1_Selecting
(object sender, ObjectDataSourceSelectingEventArgs e)
{
e.InputParameters["month"] = DateTime.Now.Month;
}
Wenn Sie diese Seite über einen Browser besuchen, können wir sehen, dass in diesem Monat (März) nur eine Mitarbeiterin eingestellt wurde Laura Callahan, die seit 1994 im Unternehmen ist.
Abbildung 10: Mitarbeiter, deren Jubiläen in diesem Monat angezeigt werden (Klicken Sie, um das bild in voller Größe anzuzeigen)
Zusammenfassung
Während die Parameterwerte der ObjectDataSource in der Regel deklarativ festgelegt werden können, ohne dass eine Codezeile erforderlich ist, ist es einfach, die Parameterwerte programmgesteuert festzulegen. Wir müssen lediglich einen Ereignishandler für das ObjectDataSource-Ereignis Selecting
erstellen, das ausgelöst wird, bevor die Methode des zugrunde liegenden Objekts aufgerufen wird, und die Werte für einen oder mehrere Parameter manuell über die InputParameters
Auflistung festlegen.
In diesem Tutorial wird der Abschnitt Grundlegende Berichterstellung abgeschlossen. Das nächste Tutorial beginnt mit dem Abschnitt Filterung und Master-Details Szenarien, in dem wir uns mit Techniken befassen, mit denen der Besucher Daten filtern und einen Drilldown aus einem master Bericht in einen Detailbericht durchführen kann.
Viel Spaß beim Programmieren!
Zum Autor
Scott Mitchell, Autor von sieben ASP/ASP.NET-Büchern und Gründer von 4GuysFromRolla.com, arbeitet seit 1998 mit Microsoft-Webtechnologien. Scott arbeitet als unabhängiger Berater, Trainer und Autor. Sein neuestes Buch ist Sams Teach Yourself ASP.NET 2.0 in 24 Stunden. Er kann unter mitchell@4GuysFromRolla.comoder über seinen Blog erreicht werden, der unter http://ScottOnWriting.NETzu finden ist.
Besonderen Dank an
Diese Tutorialreihe wurde von vielen hilfreichen Prüfern überprüft. Lead Reviewer für dieses Tutorial war Hilton Giesenow. Möchten Sie meine anstehenden MSDN-Artikel lesen? Wenn dies der Fall ist, legen Sie eine Zeile unter abmitchell@4GuysFromRolla.com.