Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
von Scott Mitchell
In diesem Lernprogramm befassen wir uns mit dem 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.
Einleitung
Wie wir im vorherigen Lernprogramm gesehen haben, stehen verschiedene 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
gelesen werden kann, kann dieser Wert beispielsweise 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 aktuell angemeldeten Benutzer-ID des Besuchers festlegen. Oder möglicherweise müssen wir den Parameterwert anpassen, bevor er an die Zugrunde liegende Objektmethode des ObjectDataSource gesendet wird.
Wenn die ObjectDataSource-Methode Select
aufgerufen wird, löst die ObjectDataSource zuerst das Auswahlereignis aus. Die Methode des zugrunde liegenden Objekts von ObjectDataSource wird dann aufgerufen. Sobald dieser Vorgang 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 Objekts des ObjectDataSource ü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 dem Aufrufen der zugrunde liegenden Objektmethode ausgelöst (Klicken Sie, um das Bild in voller Größe anzuzeigen)
In diesem Lernprogramm befassen wir uns mit dem Hinzufügen einer Methode zu unserer DAL und BLL, die einen einzelnen Eingabeparameter Month
akzeptiert, vom Typ Integer
und ein EmployeesDataTable
-Objekt zurückgibt, das mit den Mitarbeitern gefüllt ist, die ihr Einstellungsjubiläum im angegebenen Monat Month
haben. In unserem Beispiel wird dieser Parameter programmgesteuert basierend auf dem aktuellen Monat festgelegt, in dem eine Liste der "Mitarbeiterjubiläen in diesem Monat" angezeigt wird.
Fangen wir an!
Schritt 1: Hinzufügen einer Methode zuEmployeesTableAdapter
Für unser erstes Beispiel müssen wir eine Mittel hinzufügen, um die Mitarbeiter abzurufen, deren HireDate
Auftreten in einem bestimmten Monat aufgetreten ist. Um diese Funktionalität gemäß unserer Architektur bereitzustellen, müssen wir zuerst eine Methode in EmployeesTableAdapter
erstellen, die auf die richtige SQL-Anweisung abbildet. Um dies zu erreichen, öffnet man 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 zum EmployeesTableAdapter
(Klicken, um das Bild in voller Größe zu sehen)
Wählen Sie aus, eine SQL-Anweisung hinzuzufügen, die Zeilen zurückgibt. Wenn Sie den Bildschirm "Angabe einer SELECT
Anweisung" erreichen, wird die Standardanweisung 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 wird DATEPART
der Monat der HireDate
Spalte zurückgegeben.
@HiredBeforeDate-Parameter ist" />
Abbildung 3: Gibt nur die Zeilen zurück, bei denen die HireDate
Spalte kleiner oder gleich dem @HiredBeforeDate
Parameter ist (Klicken Sie, um das Bild in voller Größe anzuzeigen)
Ändern Sie schließlich die Methodennamen FillBy
und GetDataBy
auf FillByHiredDateMonth
bzw. GetEmployeesByHiredDateMonth
.
Abbildung 4: Auswählen geeigneterer Methodennamen als FillBy
und GetDataBy
(Klicken, um das Bild in voller Größe anzuzeigen)
Klicken Sie auf "Fertig stellen", um den Assistenten abzuschließen und zur Entwurfsoberfläche von DataSet zurückzukehren. Dies EmployeesTableAdapter
sollte nun eine neue Reihe 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 DataSet angezeigt (Klicken Sie, 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 Datenzugriffslogik verwendet, müssen wir unserer BLL eine Methode hinzufügen, die den 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 dieser Monat ist
Unser letzter Schritt für dieses Beispiel besteht darin, die Mitarbeiter anzuzeigen, deren Einstellungsjubiläum in diesem Monat liegt. Fügen Sie zunächst der ProgrammaticParams.aspx
Seite im BasicReporting
Ordner eine GridView hinzu, und fügen Sie eine neue ObjectDataSource als Datenquelle hinzu. Konfigurieren Sie die ObjectDataSource so, dass die EmployeesBLL
Klasse mit der SelectMethod
Eigenschaft auf GetEmployeesByHiredDateMonth(month)
verwendet wird.
Abbildung 6: Verwenden der Klasse (EmployeesBLL
Bilds mit voller Größe klicken)
Abbildung 7: Auswählen aus der GetEmployeesByHiredDateMonth(month)
Methode (Klicken, um das Bild in voller Größe anzuzeigen)
Der letzte Bildschirm fordert uns auf, die Quelle des month
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 die ObjectDataSource. Wählen Sie alternativ die ObjectDataSource aus, wechseln Sie zum Eigenschaftenfenster, und klicken Sie auf das Blitzsymbol. Doppelklicken Sie als Nächstes entweder auf 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 die 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 Symbol "Blitzblitz", um die Ereignisse eines Websteuerelements auflisten zu können.
Alle drei Ansätze fügen einen neuen Ereignishandler für das ObjectDataSource-Ereignis Selecting
zur CodeBehind-Klasse der Seite hinzu. In diesem Ereignishandler können wir die Parameterwerte mit e.InputParameters(parameterName)
lesen und schreiben, wobei parameterName
der Wert des Name
Attributs im <asp:Parameter>
Tag ist (die InputParameters
Sammlung kann auch ordinal wie in e.InputParameters(index)
indiziert werden). 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
Beim Besuch dieser Seite über einen Browser können wir sehen, dass in diesem Monat nur ein Mitarbeiter eingestellt wurde (März) Laura Callahan, der seit 1994 mit dem Unternehmen zusammen ist.
Abbildung 10: Die Mitarbeiter, deren Jahrestage in diesem Monat angezeigt werden (Zum Anzeigen des Bilds mit voller Größe klicken)
Zusammenfassung
Obwohl 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 über die InputParameters
Auflistung manuell festlegen.
Dieses Lernprogramm schließt den Abschnitt "Grundlegende Berichterstellung" ab. Im nächsten Lernprogramm wird der Abschnitt "Filterung" und "Master-Details Szenarien" gestartet, in dem wir Techniken betrachten, mit denen der Besucher Daten filtern und einen Drilldown aus einem Masterbericht in einen Detailbericht ausführen kann.
Glückliche Programmierung!
Zum Autor
Scott Mitchell, Autor von sieben ASP/ASP.NET Büchern und Gründer von 4GuysFromRolla.com, arbeitet seit 1998 mit Microsoft Web Technologies zusammen. Scott arbeitet als unabhängiger Berater, Trainer und Schriftsteller. Sein neuestes Buch ist Sams Teach Yourself ASP.NET 2.0 in 24 Stunden. Er kann bei mitchell@4GuysFromRolla.comerreicht werden.
Besonderer Dank an
Diese Lernprogrammreihe wurde von vielen hilfreichen Prüfern überprüft. Lead Reviewer für dieses Lernprogramm war Hilton Giesenow. Möchten Sie meine bevorstehenden MSDN-Artikel überprüfen? Wenn ja, schicken Sie mir eine Nachricht an mitchell@4GuysFromRolla.com.