Freigeben über


Deklarative Parameter (VB)

von Scott Mitchell

PDF herunterladen

In diesem Tutorial wird veranschaulicht, wie Sie einen Parameter verwenden, der auf einen hartcodierten Wert festgelegt ist, um die Daten auszuwählen, die in einem DetailsView-Steuerelement angezeigt werden sollen.

Einführung

Im letzten Tutorial haben wir uns mit der Anzeige von Daten mit den GridView-, DetailsView- und FormView-Steuerelementen befasst, die an ein ObjectDataSource-Steuerelement gebunden sind, das die GetProducts() -Methode aus der ProductsBLL -Klasse aufgerufen hat. Die GetProducts() -Methode gibt eine stark typisierte DataTable zurück, die mit allen Datensätzen aus der Tabelle der Northwind-Datenbank Products aufgefüllt ist. Die ProductsBLL -Klasse enthält zusätzliche Methoden zum Zurückgeben von nur Teilmengen der Produkte – GetProductByProductID(productID), GetProductsByCategoryID(categoryID)und GetProductsBySupplierID(supplierID). Diese drei Methoden erwarten einen Eingabeparameter, der angibt, wie die zurückgegebenen Produktinformationen gefiltert werden sollen.

Die ObjectDataSource kann verwendet werden, um Methoden aufzurufen, die Eingabeparameter erwarten, aber dazu müssen wir angeben, woher die Werte für diese Parameter stammen. Die Parameterwerte können hartcodiert sein oder aus einer Vielzahl von dynamischen Quellen stammen, darunter Abfragezeichenfolgenwerte, Sitzungsvariablen, der Eigenschaftswert eines Websteuerelements auf der Seite oder andere.

In diesem Tutorial beginnen wir mit der Veranschaulichung, wie ein Parameter verwendet wird, der auf einen hartcodierten Wert festgelegt ist. Insbesondere sehen wir uns an, eine DetailsView auf der Seite hinzuzufügen, auf der Informationen zu einem bestimmten Produkt angezeigt werden, nämlich Chef Anton es Gumbo Mix mit einem ProductID von 5. Als Nächstes erfahren Sie, wie Sie den Parameterwert basierend auf einem Websteuerelement festlegen. Insbesondere verwenden wir ein TextBox-Element, damit der Benutzer ein Land/eine Region eingeben kann. Anschließend kann er auf eine Schaltfläche klicken, um die Liste der Lieferanten anzuzeigen, die sich in diesem Land/dieser Region befinden.

Verwenden eines Hard-Coded-Parameterwerts

Im ersten Beispiel fügen Sie der Seite im BasicReporting Ordner ein DetailsView-Steuerelement DeclarativeParams.aspx hinzu. Wählen Sie <im Smarttag von DetailsView in der Dropdownliste Neue Datenquelle> aus, und fügen Sie eine ObjectDataSource hinzu.

Hinzufügen einer ObjectDataSource zur Seite

Abbildung 1: Hinzufügen einer ObjectDataSource zur Seite (Klicken Sie hier, um das Bild in voller Größe anzuzeigen)

Dadurch wird der Assistent Datenquelle auswählen des ObjectDataSource-Steuerelements automatisch gestartet. Wählen Sie die ProductsBLL -Klasse auf dem ersten Bildschirm des Assistenten aus.

Wählen Sie die ProductsBLL-Klasse aus.

Abbildung 2: Auswählen der ProductsBLL Klasse (Klicken Sie hier, um das Bild in voller Größe anzuzeigen)

Da wir Informationen zu einem bestimmten Produkt anzeigen möchten, möchten wir die GetProductByProductID(productID) -Methode verwenden.

Wählen Sie die GetProductByProductID(productID)-Methode aus.

Abbildung 3: Auswählen der GetProductByProductID(productID) Methode (Klicken Sie hier, um das Bild in voller Größe anzuzeigen)

Da die ausgewählte Methode einen Parameter enthält, gibt es einen weiteren Bildschirm für den Assistenten, auf dem wir aufgefordert werden, den wert zu definieren, der für den Parameter verwendet werden soll. Die Liste auf der linken Seite enthält alle Parameter für die ausgewählte Methode. Für GetProductByProductID(productID) gibt es nur eine productID. Auf der rechten Seite können wir den Wert für den ausgewählten Parameter angeben. Die Dropdownliste für die Parameterquelle listet die verschiedenen möglichen Quellen für den Parameterwert auf. Da wir den hartcodierten Wert 5 für den productID Parameter angeben möchten, behalten Sie die Parameterquelle als None bei, und geben Sie 5 in das Textfeld DefaultValue ein.

Der Hard-Coded Parameterwert 5 wird für den productID-Parameter verwendet.

Abbildung 4: Ein Hard-Coded Parameterwert von 5 wird für den productID Parameter verwendet (Klicken Sie hier, um das Bild in voller Größe anzuzeigen)

Nach Abschluss des Assistenten zum Konfigurieren von Datenquellen enthält das deklarative Markup des ObjectDataSource-Steuerelements ein Parameter -Objekt in der SelectParameters Auflistung für jeden der Eingabeparameter, die von der in der SelectMethod -Eigenschaft definierten Methode erwartet werden. Da die Methode, die wir in diesem Beispiel verwenden, nur einen einzelnen Eingabeparameter erwartet, parameterIDgibt es hier nur einen Eintrag. Die SelectParameters Auflistung kann eine beliebige Klasse enthalten, die von der Parameter -Klasse im System.Web.UI.WebControls -Namespace abgeleitet wird. Für hartcodierte Parameterwerte wird die Basisklasse Parameter verwendet, aber für die anderen Parameterquelloptionen wird eine abgeleitete Parameter Klasse verwendet. Sie können bei Bedarf auch eigene benutzerdefinierte Parametertypen erstellen.

<asp:ObjectDataSource ID="ObjectDataSource1" runat="server"
    SelectMethod="GetProductByProductID" TypeName="ProductsBLL">
    <SelectParameters>
        <asp:Parameter DefaultValue="5"
           Name="productID" Type="Int32" />
    </SelectParameters>
</asp:ObjectDataSource>

Hinweis

Wenn Sie auf Ihrem eigenen Computer folgen, kann das an diesem Punkt angezeigte deklarative Markup Werte für die InsertMethodEigenschaften , UpdateMethodund DeleteMethod sowie enthalten DeleteParameters. Der Assistent "Datenquelle auswählen" von ObjectDataSource gibt automatisch die Methoden aus der an, die ProductBLL zum Einfügen, Aktualisieren und Löschen verwendet werden sollen. Wenn Sie diese also nicht explizit gelöscht haben, werden sie im obigen Markup enthalten.

Wenn Sie diese Seite besuchen, ruft das Datenwebsteuerelement die ObjectDataSource-Methode auf Select , die die Methode der ProductsBLL Klasse GetProductByProductID(productID) mit dem hartcodierten Wert 5 für den productID Eingabeparameter aufruft. Die -Methode gibt ein stark typisiertes ProductDataTable Objekt zurück, das eine einzelne Zeile mit Informationen zu Chef Anton es Gumbo Mix (das Produkt mit ProductID 5) enthält.

Informationen zu Chef Anton es Gumbo Mix werden angezeigt

Abbildung 5: Informationen zu Chef Anton es Gumbo Mix werden angezeigt (Klicken Sie hier, um das Bild in voller Größe anzuzeigen)

Festlegen des Parameterwerts auf den Eigenschaftswert eines Websteuerelements

Die Parameterwerte der ObjectDataSource können auch basierend auf dem Wert eines Websteuerelements auf der Seite festgelegt werden. Um dies zu veranschaulichen, verwenden wir ein GridView-Objekt, das alle Lieferanten auflistet, die sich in einem vom Benutzer angegebenen Land befinden. Um dies zu erreichen, fügen Sie der Seite ein TextBox-Element hinzu, in das der Benutzer einen Landesnamen eingeben kann. Legen Sie die Eigenschaft dieses TextBox-Steuerelements ID auf fest CountryName. Fügen Sie auch ein Button-Websteuerelement hinzu.

Hinzufügen eines Textfelds zur Seite mit der ID CountryName

Abbildung 6: Hinzufügen eines TextBox-Steuerelements zur Seite mit IDCountryName (Klicken Sie hier, um das Bild in voller Größe anzuzeigen)

Fügen Sie als Nächstes der Seite ein GridView-Element hinzu, und wählen Sie aus dem Smarttag aus, um eine neue ObjectDataSource hinzuzufügen. Da wir Lieferanteninformationen anzeigen möchten, wählen Sie die SuppliersBLL Klasse auf dem ersten Bildschirm des Assistenten aus. Wählen Sie auf dem zweiten Bildschirm die GetSuppliersByCountry(country) -Methode aus.

Wählen Sie die GetSuppliersByCountry(country)-Methode aus.

Abbildung 7: Auswählen der GetSuppliersByCountry(country) -Methode (Klicken Sie hier, um das Bild in voller Größe anzuzeigen)

Da die GetSuppliersByCountry(country) -Methode über einen Eingabeparameter verfügt, enthält der Assistent erneut einen letzten Bildschirm zum Auswählen des Parameterwerts. Legen Sie dieses Mal die Parameterquelle auf Control fest. Dadurch wird die Dropdownliste ControlID mit den Namen der Steuerelemente auf der Seite aufgefüllt. wählen Sie das CountryName Steuerelement aus der Liste aus. Wenn die Seite zum ersten Mal aufgerufen wird, ist textBox CountryName leer, sodass keine Ergebnisse zurückgegeben werden und nichts angezeigt wird. Wenn Sie einige Ergebnisse standardmäßig anzeigen möchten, legen Sie das Textfeld DefaultValue entsprechend fest.

Festlegen des Parameterwerts auf den CountryName-Steuerelementwert

Abbildung 8: Festlegen des Parameterwerts auf den CountryName Steuerelementwert (Klicken Sie hier, um das Bild in voller Größe anzuzeigen)

Das deklarative Markup der ObjectDataSource unterscheidet sich geringfügig von unserem ersten Beispiel, indem ein ControlParameter anstelle des Standardobjekts Parameter verwendet wird. Ein ControlParameter verfügt über zusätzliche Eigenschaften zum Angeben des ID Websteuerelements und des Eigenschaftswerts, der für den Parameter (PropertyName) verwendet werden soll. Der Assistent zum Konfigurieren von Datenquellen war intelligent genug, um zu ermitteln, dass wir für ein TextBox-Objekt wahrscheinlich die Text -Eigenschaft für den Parameterwert verwenden möchten. Wenn Sie jedoch einen anderen Eigenschaftswert als das Websteuerelement verwenden möchten, können Sie den PropertyName Wert hier ändern oder indem Sie im Assistenten auf den Link "Erweiterte Eigenschaften anzeigen" klicken.

<asp:ObjectDataSource ID="ObjectDataSource2" runat="server"
    SelectMethod="GetSuppliersByCountry" TypeName="SuppliersBLL">
    <SelectParameters>
        <asp:ControlParameter ControlID="CountryName"
            Name="country" PropertyName="Text"
            Type="String" />
    </SelectParameters>
</asp:ObjectDataSource>

Wenn Sie die Seite zum ersten Mal besuchen, ist das CountryName Textfeld leer. Die ObjectDataSource-Methode Select wird weiterhin von GridView aufgerufen, aber der Wert von Nothing wird an die GetSuppliersByCountry(country) -Methode übergeben. Der TableAdapter konvertiert den Nothing in einen Datenbankwert NULL (DBNull.Value), aber die von der GetSuppliersByCountry(country) -Methode verwendete Abfrage wird so geschrieben, dass sie keine Werte zurückgibt, wenn ein NULL Wert für den @CategoryID Parameter angegeben wird. Kurz gesagt, es werden keine Lieferanten zurückgegeben.

Sobald der Besucher jedoch in ein Land/eine Region eintritt und auf die Schaltfläche Lieferanten anzeigen klickt, um ein Postback zu verursachen, wird die ObjectDataSource-Methode Select erneut in die Warteschlange gesetzt und der Wert des TextBox-Steuerelements Text als country Parameter übergeben.

Diese Lieferanten aus Kanada werden angezeigt

Abbildung 9: Diese Lieferanten aus Kanada werden angezeigt (Klicken Sie hier, um das Bild in voller Größe anzuzeigen)

Standardmäßige Anzeige aller Lieferanten

Anstatt beim ersten Anzeigen der Seite keinen der Lieferanten anzuzeigen, sollten wir zunächst alle Lieferanten anzeigen, sodass der Benutzer die Liste durch Eingabe eines Ländernamens in das Textfeld eingrenzen kann. Wenn das TextBox-Element leer ist, wird die -Methode der SuppliersBLL -Klasse GetSuppliersByCountry(country) für den country Eingabeparameter übergebenNothing. Dieser Nothing Wert wird dann an die DAL-Methode GetSupplierByCountry(country) übergeben, wo er in einen Datenbankwert NULL für den @Country Parameter in der folgenden Abfrage übersetzt wird:

SELECT     SupplierID, CompanyName, Address, City, Country, Phone
FROM         Suppliers
WHERE Country = @Country

Der Ausdruck Country = NULL gibt immer False zurück, auch für Datensätze, deren Country Spalte einen NULL Wert aufweist. Daher werden keine Datensätze zurückgegeben.

Um alle Lieferanten zurückzugeben, wenn das Country TextBox leer ist, können wir die GetSuppliersByCountry(country) -Methode in der BLL erweitern, um die Methode aufzurufen, wenn ihr GetSuppliers() country-Parameter ist Nothing , und andernfalls die METHODE der GetSuppliersByCountry(country) DAL aufzurufen. Dies führt dazu, dass alle Lieferanten zurückgegeben werden, wenn kein Land angegeben ist, und die entsprechende Teilmenge der Lieferanten, wenn der Länderparameter enthalten ist.

Ändern Sie die GetSuppliersByCountry(country) -Methode in der SuppliersBLL -Klasse wie folgt:

Public Function GetSuppliersByCountry(country As String) _
    As Northwind.SuppliersDataTable
    If String.IsNullOrEmpty(country) Then
        Return GetSuppliers()
    Else
        Return Adapter.GetSuppliersByCountry(country)
    End If
End Function

Mit dieser Änderung werden auf der DeclarativeParams.aspx Seite alle Lieferanten angezeigt, wenn sie zum ersten Mal besucht werden (oder wenn das CountryName TextBox-Objekt leer ist).

Alle Lieferanten werden jetzt standardmäßig angezeigt.

Abbildung 10: Alle Lieferanten werden jetzt standardmäßig angezeigt (Klicken Sie hier, um das Bild in voller Größe anzuzeigen)

Zusammenfassung

Um Methoden mit Eingabeparametern verwenden zu können, müssen wir die Werte für die Parameter in der ObjectDataSource-Auflistung SelectParameters angeben. Unterschiedliche Parametertypen ermöglichen das Abrufen des Parameterwerts aus verschiedenen Quellen. Der Standardparametertyp verwendet einen hartcodierten Wert, aber genauso einfach (und ohne Codezeile) können Parameterwerte aus der Abfragezeichenfolge, Sitzungsvariablen, Cookies und sogar vom Benutzer eingegebenen Werten aus Websteuerelementen auf der Seite abgerufen werden.

In den Beispielen, die wir in diesem Tutorial behandelt haben, wurde die Verwendung deklarativer Parameterwerte veranschaulicht. Es kann jedoch vorkommen, dass wir eine Parameterquelle verwenden müssen, die nicht verfügbar ist, z. B. das aktuelle Datum und die aktuelle Uhrzeit oder, wenn unsere Website die Mitgliedschaft verwendet hat, die Benutzer-ID des Besuchers. Für solche Szenarien können wir die Parameterwerte programmgesteuert festlegen, bevor objectDataSource die -Methode des zugrunde liegenden Objekts aufruft. Wie Sie dies erreichen, erfahren Sie im nächsten Tutorial.

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.