Freigeben über


Deklarative Parameter (VB)

von Scott Mitchell

PDF herunterladen

In diesem Lernprogramm veranschaulichen wir, 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 Lernprogramm haben wir uns mit dem Anzeigen von Daten mit den Steuerelementen GridView, DetailsView und FormView befasst, die an ein ObjectDataSource-Steuerelement gebunden sind, das die Methode aus der GetProducts() ProductsBLL Klasse aufgerufen hat. Die GetProducts() Methode gibt eine stark typierte DataTable zurück, die mit allen Datensätzen aus der Tabelle der Northwind-Datenbank Products aufgefüllt wird. 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.

Die ObjectDataSource kann verwendet werden, um Methoden aufzurufen, die Eingabeparameter erwarten, aber dazu müssen wir angeben, wo die Werte für diese Parameter stammen. Die Parameterwerte können hartcodiert sein oder aus einer Vielzahl dynamischer Quellen stammen, einschließlich: Abfragezeichenfolgenwerte, Sitzungsvariablen, Eigenschaftswert eines Websteuerelements auf der Seite oder anderen.

Beginnen wir in diesem Lernprogramm mit der Verwendung eines Parameters, der auf einen hartcodierten Wert festgelegt ist. Genauer gesagt sehen wir uns das Hinzufügen einer Detailansicht zu der Seite an, auf der Informationen zu einem bestimmten Produkt angezeigt werden, nämlich Chef Anton es Gumbo Mix, der eine ProductID von 5 hat. Als Nächstes erfahren Sie, wie Sie den Parameterwert basierend auf einem Websteuerelement festlegen. Insbesondere verwenden wir ein TextBox-Steuerelement, um dem Benutzer die Eingabe in ein Land/eine Region zu ermöglichen, nach dem er auf eine Schaltfläche klicken kann, um die Liste der Lieferanten anzuzeigen, die sich in diesem Land/dieser Region befinden.

Verwenden eines hartcodierten Parameterwerts

Beginnen Sie zunächst mit dem DeclarativeParams.aspx Hinzufügen eines DetailsView-Steuerelements zur Seite im BasicReporting Ordner. 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 den ProductsBLL Kurs 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.

Choose the GetProductByProductID(productID) method

Abbildung 3: Auswählen der GetProductByProductID(productID) Methode (Klicken Sie, 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, in dem wir aufgefordert werden, den für den Parameter zu verwendenden Wert zu definieren. In der Liste auf der linken Seite werden alle Parameter für die ausgewählte Methode angezeigt. Für GetProductByProductID(productID) es gibt nur eine productID. Auf der rechten Seite können wir den Wert für den ausgewählten Parameter angeben. Die Dropdownliste der Parameterquelle listet die verschiedenen möglichen Quellen für den Parameterwert auf. Da wir einen hartcodierten Wert von 5 für den productID Parameter angeben möchten, belassen Sie die Parameterquelle als Keine, und geben Sie 5 in das Textfeld "DefaultValue" ein.

Ein hartcodierter Parameterwert von 5 wird für den productID-Parameter verwendet.

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

Nach Abschluss des Assistenten zum Konfigurieren der Datenquelle enthält das deklarative Markup des ObjectDataSource-Steuerelements ein Parameter Objekt in der SelectParameters Auflistung für jede der Eingabeparameter, die von der in der SelectMethod Eigenschaft definierten Methode erwartet werden. Da die in diesem Beispiel verwendete Methode 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 ist. Bei hartcodierten Parameterwerten 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 deklarative Markup, das Sie an diesem Punkt sehen, Werte für die InsertMethod, UpdateMethodund DeleteMethod Eigenschaften sowie .DeleteParameters Der Assistent zum Auswählen von Datenquellen von ObjectDataSource gibt automatisch die Methoden an, die ProductBLL zum Einfügen, Aktualisieren und Löschen verwendet werden sollen. Wenn Sie diese nicht explizit gelöscht haben, werden sie im obigen Markup enthalten.

Beim Aufrufen dieser Seite ruft das Datenwebsteuerelement die Methode von Select ObjectDataSource auf, die die Methode der ProductsBLL Klasse GetProductByProductID(productID) mithilfe des hartcodierten Werts 5 für den productID Eingabeparameter aufruft. Die Methode gibt ein stark typiertes ProductDataTable Objekt zurück, das eine einzelne Zeile mit Informationen über Chef Anton es Gumbo Mix (das Produkt mit ProductID 5) enthält.

Informationen über Chef Antons Gumbo Mix werden angezeigt

Abbildung 5: Informationen zu Chef Antons Gumbo Mix werden angezeigt (Zum Anzeigen des Bilds mit voller Größe klicken)

Festlegen des Parameterwerts auf den Eigenschaftswert eines Websteuerelements

Die Parameterwerte von ObjectDataSource können auch basierend auf dem Wert eines Websteuerelements auf der Seite festgelegt werden. Um dies zu veranschaulichen, haben wir eine GridView, die alle Lieferanten auflistet, die sich in einem vom Benutzer angegebenen Land befinden. Um dies zu erreichen, fügen Sie der Seite, in die der Benutzer einen Landesnamen eingeben kann, ein TextBox-Objekt hinzu. Legen Sie die Eigenschaft dieses TextBox-Steuerelements ID auf CountryName. Fügen Sie außerdem ein Schaltflächenwebsteuerelement hinzu.

Hinzufügen eines TextBox-Steuerelements zur Seite mit der ID

Abbildung 6: Hinzufügen eines TextBox-Steuerelements zur Seite mit ID CountryName (Klicken, 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, 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.

Choose the GetSuppliersByCountry(country) Method

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

Da die GetSuppliersByCountry(country) Methode über einen Eingabeparameter verfügt, enthält der Assistent erneut einen endgültigen 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 besucht wird, ist das CountryName TextBox-Objekt leer, sodass keine Ergebnisse zurückgegeben werden und nichts angezeigt wird. Wenn Sie standardmäßig einige Ergebnisse 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 von ObjectDataSource unterscheidet sich geringfügig von unserem ersten Beispiel, wobei anstelle des Standardobjekts Parameter ein ControlParameter verwendet wird. A 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 der Datenquelle war intelligent genug, um festzustellen, dass wir für ein TextBox-Objekt wahrscheinlich die Text Eigenschaft für den Parameterwert verwenden möchten. Wenn Sie jedoch einen anderen Eigenschaftswert aus dem 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 TextBox-Objekt leer. Die Methode von Select ObjectDataSource wird weiterhin von GridView aufgerufen, aber ein Wert von Nothing wird an die GetSuppliersByCountry(country) Methode übergeben. Der TableAdapter konvertiert den Nothing Wert in einen Datenbankwert NULL (DBNull.Value), die von der GetSuppliersByCountry(country) Methode verwendete Abfrage wird jedoch so geschrieben, dass keine Werte zurückgegeben werden, wenn ein NULL Wert für den @CategoryID Parameter angegeben wird. Kurz gesagt, es werden keine Lieferanten zurückgegeben.

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

Diese Lieferanten aus Kanada werden angezeigt

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

Standardmäßiges Anzeigen aller Lieferanten

Anstatt beim ersten Anzeigen der Seite keines der Lieferanten anzuzeigen, möchten wir möglicherweise zuerst alle Lieferanten anzeigen, sodass der Benutzer die Liste analysieren kann, indem er einen Ländernamen in das TextBox-Feld eingibt. Wenn das TextBox-Objekt leer ist, wird die Methode der SuppliersBLL Klasse für den country Eingabeparameter übergeben Nothing GetSuppliersByCountry(country). 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 Land TextBox leer ist, können wir die GetSuppliersByCountry(country) Methode in der BLL erweitern, um die Methode aufzurufen, wenn der GetSuppliers() Länderparameter istNothing, und um die DAL-Methode GetSuppliersByCountry(country) aufzurufen. Dies wirkt sich auf die Rückgabe aller Lieferanten aus, 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 zeigt die DeclarativeParams.aspx Seite alle Lieferanten an, 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 zu verwenden, 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 von Benutzern eingegebenen Werten aus Websteuerelementen auf der Seite abgerufen werden.

Die Beispiele, die wir in diesem Lernprogramm behandelt haben, veranschaulichen die Verwendung deklarativer Parameterwerte. 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 Mitgliedschaft verwendet hat, die Benutzer-ID des Besuchers. Für solche Szenarien können wir die Parameterwerte programmgesteuert festlegen, bevor die ObjectDataSource die Methode des zugrunde liegenden Objekts aufruft. Dies wird im nächsten Lernprogramm erläutert.

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 über mitchell@4GuysFromRolla.com seinen Blog erreicht werden, der unter .http://ScottOnWriting.NET

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 dies der Fall ist, legen Sie mir eine Zeile bei mitchell@4GuysFromRolla.com.