Freigeben über


Programmgesteuertes Festlegen der Parameterwerte des ObjectDataSource-Steuerelements (VB)

von Scott Mitchell

PDF herunterladen

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.

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

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 Monthvom Typ Integer akzeptiert und ein EmployeesDataTable Objekt zurückgibt, das mit den Mitarbeitern aufgefüllt wird, deren Einstellungsjubiläum im angegebenen Monthist. 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.

Hinzufügen einer neuen Abfrage zum EmployeesTableAdapter

Abbildung 2: Hinzufügen einer neuen Abfrage zu (EmployeesTableAdapterKlicken 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.

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

Wählen Sie geeignetere Methodennamen als FillBy und GetDataBy aus.

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.

Die neuen Methoden werden auf der Entwurfsoberfläche des DataSets angezeigt.

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

Verwenden der EmployeesBLL-Klasse

Abbildung 6: Verwenden der EmployeesBLL -Klasse (Klicken Sie hier, um das Bild in voller Größe anzuzeigen)

Wählen Sie Aus der GetEmployeesByHiredDateMonth(month)-Methode aus.

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.

Lassen Sie die Parameterquelle auf Keine festgelegt.

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.

Klicken Sie im Eigenschaftenfenster auf das Blitzsymbol, um die Ereignisse eines Websteuerelements aufzulisten.

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.

Mitarbeiter, deren Jubiläen in diesem Monat angezeigt werden

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.