Freigeben über


Programmatisch die Parameterwerte der ObjectDataSource festlegen (VB)

von Scott Mitchell

PDF herunterladen

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.

Die Selected- und Selecting-Ereignisse des ObjectDataSource-Objekts werden vor und nach dem Aufruf der Methode des zugrunde liegenden Objekts ausgelöst.

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.

Hinzufügen einer neuen Abfrage zum EmployeesTableAdapter

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.

Gibt nur die Zeilen zurück, in denen die Spalte „HireDate“ kleiner oder gleich dem <span class= @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.

Auswählen geeigneterer Methodennamen als FillBy und GetDataBy

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.

Die neuen Methoden werden auf der Entwurfsoberfläche von DataSet angezeigt

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.

Verwenden Sie die EmployeesBLL-Klasse

Abbildung 6: Verwenden der Klasse (EmployeesBLL Bilds mit voller Größe klicken)

Auswählen aus der Methode GetEmployeesByHiredDateMonth(month)

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".

Lassen Sie die Parameterquelle auf

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.

Klicken Sie im Eigenschaftenfenster auf das Blitzsymbol, um die Ereignisse eines Websteuerelements auflisten zu können.

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.

Diese Mitarbeiter, deren Jahrestage in diesem Monat angezeigt werden

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.