Programmgesteuertes Festlegen der Parameterwerte des ObjectDataSource-Steuerelements (VB)
von Scott Mitchell
In diesem Tutorial wird das Hinzufügen einer Methode zu DAL und BLL erläutert, die einen einzelnen Eingabeparameter akzeptiert und Daten zurückgibt. Im Beispiel wird dieser Parameter programmgesteuert festgelegt.
Einführung
Wie wir im vorherigen Tutorial gesehen haben, stehen eine Reihe von Optionen für die deklarative Übergabe von Parameterwerten an die ObjectDataSource-Methoden 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
gelesen wird, 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
berücksichtigt wurde. Wenn unsere Website Benutzerkonten unterstützt, sollten 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.
Immer wenn die ObjectDataSource-Methode Select
aufgerufen wird, löst objectDataSource zuerst das Selecting-Ereignis aus. Anschließend wird die -Methode des dem ObjectDataSource zugrunde liegenden Objekts aufgerufen. Nachdem dies abgeschlossen ist, wird das Selected-Ereignis von ObjectDataSource ausgelöst (Abbildung 1 veranschaulicht diese Abfolge von Ereignissen). 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 Ereignisse und Selecting
der ObjectDataSource Selected
werden vor und nach dem Aufrufen der Methode des zugrunde liegenden Objekts aufgerufen (Klicken Sie hier, um das Bild in voller Größe anzuzeigen)
In diesem Tutorial sehen wir uns das Hinzufügen einer Methode zu unserer DAL und BLL an, die einen einzelnen Eingabeparameter Month
vom Typ Integer
akzeptiert und ein EmployeesDataTable
Objekt zurückgibt, das mit den Mitarbeitern aufgefüllt wird, 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 ein Mittel hinzufügen, um die Mitarbeiter abzurufen, die HireDate
in einem bestimmten Monat aufgetreten sind. Um diese Funktionalität in Übereinstimmung mit unserer Architektur bereitzustellen, müssen wir zunächst eine Methode in EmployeesTableAdapter
erstellen, die der richtigen SQL-Anweisung zugeordnet ist. Öffnen Sie dazu zunächst das DataSet vom Typ Northwind. 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 (EmployeesTableAdapter
Klicken Sie hier, um das 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 Standardanweisungen SELECT
für den 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 DataSets zurückzukehren. Die EmployeesTableAdapter
sollte nun einen neuen Satz von Methoden für den Zugriff auf Mitarbeiter enthalten, die in einem bestimmten 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 Ebene 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 bestimmten Datum eingestellt wurden. Öffnen Sie die EmployeesBLL.vb
Datei, und fügen Sie die folgende Methode hinzu:
<System.ComponentModel.DataObjectMethodAttribute _
(System.ComponentModel.DataObjectMethodType.Select, False)> _
Public Function GetEmployeesByHiredDateMonth(ByVal month As Integer) _
As Northwind.EmployeesDataTable
Return Adapter.GetEmployeesByHiredDateMonth(month)
End Function
Wie bei unseren anderen Methoden in dieser Klasse ruft GetEmployeesByHiredDateMonth(month)
einfach die DAL auf und gibt 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 der Seite im BasicReporting
Ordner ein GridView-Element ProgrammaticParams.aspx
hinzu, und fügen Sie eine neue ObjectDataSource als Datenquelle hinzu. Konfigurieren Sie objectDataSource so, dass die EmployeesBLL
-Klasse mit auf SelectMethod
festgelegt ist GetEmployeesByHiredDateMonth(month)
.
Abbildung 6: Verwenden der EmployeesBLL
-Klasse (Klicken Sie hier, um das Bild in voller Größe anzuzeigen)
Abbildung 7: Auswählen von aus der GetEmployeesByHiredDateMonth(month)
-Methode (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 None 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. Wechseln Sie dazu zur Entwurfsansicht, und doppelklicken Sie auf objectDataSource. Wählen Sie alternativ 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. Als dritte Option können Sie den Ereignishandler erstellen, indem Sie objectDataSource und das zugehörige Selecting
Ereignis aus den beiden Dropdownlisten oben in der CodeBehind-Klasse der Seite auswählen.
Abbildung 9: Klicken Sie im Eigenschaftenfenster auf das Blitzsymbol, um die Ereignisse eines Websteuerelements aufzulisten.
Alle drei 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 Sub ObjectDataSource1_Selecting _
(sender As Object, e As ObjectDataSourceSelectingEventArgs) _
Handles ObjectDataSource1.Selecting
e.InputParameters("month") = DateTime.Now.Month
End Sub
Wenn Wir diese Seite über einen Browser besuchen, können wir sehen, dass in diesem Monat (März) nur ein Mitarbeiter eingestellt wurde Laura Callahan, die seit 1994 bei der Firma ist.
Abbildung 10: Mitarbeiter, deren Jubiläen in diesem Monat angezeigt werden (Klicken Sie hier, 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 Hours. Er kann unter mitchell@4GuysFromRolla.comoder über seinen Blog erreicht werden, der unter http://ScottOnWriting.NETzu finden ist.
Besonderer Dank an
Diese Tutorialreihe wurde von vielen hilfreichen Prüfern überprüft. Leitender Prüfer für dieses Tutorial war Hilton Giesenow. Möchten Sie meine bevorstehenden MSDN-Artikel lesen? Wenn dies der Fall ist, legen Sie eine Zeile unter abmitchell@4GuysFromRolla.com.