Freigeben über


Programmgesteuertes Festlegen der Parameterwerte des ObjectDataSource-Steuerelements (C#)

von Scott Mitchell

PDF herunterladen

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.

Die ObjectDataSource-Methode

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 Monthvom Typ int akzeptiert und ein EmployeesDataTable Objekt zurückgibt, das mit den Mitarbeitern aufgefüllt ist, 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 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.

Hinzufügen einer neuen Abfrage zum EmployeesTableAdapter

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.

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

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

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 Methode GetEmployeesByHiredDateMonth(month) aus.

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.

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

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.

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.

Mitarbeiter, deren Jahrestage in diesem Monat angezeigt werden

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.