Partager via


Paramètres déclaratifs (VB)

par Scott Mitchell

Télécharger le PDF

Dans ce tutoriel, nous allons illustrer comment utiliser un paramètre défini sur une valeur codée en dur pour sélectionner les données à afficher dans un contrôle DetailsView.

Introduction

Dans le dernier tutoriel , nous avons examiné l’affichage des données avec les contrôles GridView, DetailsView et FormView liés à un contrôle ObjectDataSource qui a appelé la GetProducts() méthode à partir de la ProductsBLL classe. La GetProducts() méthode retourne un DataTable fortement typé rempli avec tous les enregistrements de la table de la base de Products données Northwind. La ProductsBLL classe contient des méthodes supplémentaires pour retourner uniquement des sous-ensembles des produits - GetProductByProductID(productID), GetProductsByCategoryID(categoryID)et GetProductsBySupplierID(supplierID). Ces trois méthodes s’attendent à un paramètre d’entrée indiquant comment filtrer les informations de produit retournées.

ObjectDataSource peut être utilisé pour appeler des méthodes qui attendent des paramètres d’entrée, mais pour ce faire, nous devons spécifier l’emplacement de ces paramètres. Les valeurs de paramètre peuvent être codées en dur ou provenir de diverses sources dynamiques, notamment : valeurs de chaîne de requête, variables de session, valeur de propriété d’un contrôle Web sur la page ou d’autres.

Pour ce tutoriel, commençons par illustrer comment utiliser un paramètre défini sur une valeur codée en dur. Plus précisément, nous allons examiner l’ajout d’un DetailsView à la page qui affiche des informations sur un produit spécifique, à savoir Chef Anton’s Gumbo Mix, qui a une ProductID valeur de 5. Ensuite, nous allons voir comment définir la valeur du paramètre en fonction d’un contrôle Web. En particulier, nous allons utiliser une zone de texte pour permettre à l’utilisateur de taper un pays/une région, après quoi il peut cliquer sur un bouton pour afficher la liste des fournisseurs qui résident dans ce pays/région.

Utilisation d’une valeur de paramètre codé en dur

Pour le premier exemple, commencez par ajouter un contrôle DetailsView à la DeclarativeParams.aspx page du BasicReporting dossier. Dans la balise active detailsView, sélectionnez <Nouvelle source> de données dans la liste déroulante et choisissez d’ajouter un ObjectDataSource.

Ajouter un ObjectDataSource à la page

Figure 1 : Ajouter un ObjectDataSource à la page (cliquez pour afficher l’image de taille complète)

Cela démarre automatiquement l’Assistant Choisir une source de données du contrôle ObjectDataSource. Sélectionnez la ProductsBLL classe dans le premier écran de l’Assistant.

Sélectionner la classe ProductsBLL

Figure 2 : Sélectionner la classe (cliquez pour afficher l’image ProductsBLLde taille complète)

Étant donné que nous voulons afficher des informations sur un produit particulier, nous voulons utiliser la GetProductByProductID(productID) méthode.

Choisir la méthode GetProductByProductID(productID)

Figure 3 : Choisir la méthode (Cliquer pour afficher l’image GetProductByProductID(productID)de taille complète)

Étant donné que la méthode que nous avons sélectionnée inclut un paramètre, il existe un autre écran pour l’Assistant, où nous sommes invités à définir la valeur à utiliser pour le paramètre. La liste à gauche affiche tous les paramètres de la méthode sélectionnée. Pour GetProductByProductID(productID) qu’il n’y en ait qu’un productIDseul. À droite, nous pouvons spécifier la valeur du paramètre sélectionné. La liste déroulante source du paramètre énumère les différentes sources possibles pour la valeur du paramètre. Étant donné que nous voulons spécifier une valeur codée en dur de 5 pour le productID paramètre, laissez la source du paramètre comme None et entrez 5 dans la zone de texte DefaultValue.

Une valeur de paramètre codée en dur de 5 sera utilisée pour le paramètre productID

Figure 4 : Une valeur de paramètre codée en dur de 5 sera utilisée pour le productID paramètre (cliquez pour afficher l’image de taille complète)

Une fois l’Assistant Configuration de la source de données terminée, le balisage déclaratif du contrôle ObjectDataSource inclut un Parameter objet dans la SelectParameters collection pour chacun des paramètres d’entrée attendus par la méthode définie dans la SelectMethod propriété. Étant donné que la méthode que nous utilisons dans cet exemple s’attend simplement à un seul paramètre d’entrée, parameterIDil n’y a qu’une seule entrée ici. La SelectParameters collection peut contenir n’importe quelle classe qui dérive de la Parameter classe dans l’espace System.Web.UI.WebControls de noms. Pour les valeurs de paramètre codées en dur, la classe de base Parameter est utilisée, mais pour les autres options de source de paramètre qu’une classe dérivée Parameter est utilisée ; vous pouvez également créer vos propres types de paramètres personnalisés, si nécessaire.

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

Remarque

Si vous suivez sur votre propre ordinateur le balisage déclaratif que vous voyez à ce stade peut inclure des valeurs pour les InsertMethodUpdateMethodpropriétés, et DeleteMethod les propriétés, ainsi que DeleteParameters. L’Assistant Choisir une source de données d’ObjectDataSource spécifie automatiquement les méthodes à utiliser pour l’insertion, la ProductBLL mise à jour et la suppression. Par conséquent, sauf si vous les avez explicitement effacées, elles seront incluses dans le balisage ci-dessus.

Lors de la visite de cette page, le contrôle Web de données appelle la méthode ObjectDataSource Select , qui appelle la méthode de la ProductsBLL classe à l’aide de GetProductByProductID(productID) la valeur codée en dur 5 pour le productID paramètre d’entrée. La méthode retourne un objet fortement typé ProductDataTable qui contient une seule ligne avec des informations sur le mix Gumbo de Chef Anton (le produit avec ProductID 5).

Les informations sur le mélange Gumbo du chef Anton sont affichées

Figure 5 : Les informations sur le mélange Gumbo du chef Anton sont affichées (cliquez pour afficher l’image de taille complète)

Définition de la valeur du paramètre sur la valeur de propriété d’un contrôle Web

Les valeurs de paramètre d’ObjectDataSource peuvent également être définies en fonction de la valeur d’un contrôle Web sur la page. Pour illustrer cela, nous allons disposer d’un GridView qui répertorie tous les fournisseurs situés dans un pays spécifié par l’utilisateur. Pour ce faire, ajoutez un TextBox à la page dans laquelle l’utilisateur peut entrer un nom de pays. Définissez la propriété de ID ce contrôle TextBox sur CountryName. Ajoutez également un contrôle Web Button.

Ajouter une zone de texte à la page avec ID CountryName

Figure 6 : Ajouter une zone de texte à la page avec ID CountryName (cliquez pour afficher l’image de taille complète)

Ensuite, ajoutez un GridView à la page et, à partir de la balise active, choisissez d’ajouter un nouvel ObjectDataSource. Étant donné que nous voulons afficher les informations du fournisseur, sélectionnez la SuppliersBLL classe dans le premier écran de l’Assistant. Dans le deuxième écran, sélectionnez la GetSuppliersByCountry(country) méthode.

Choisir la méthode GetSuppliersByCountry(country)

Figure 7 : Choisir la méthode (Cliquer pour afficher l’image GetSuppliersByCountry(country)de taille complète)

Étant donné que la GetSuppliersByCountry(country) méthode a un paramètre d’entrée, l’Assistant inclut une nouvelle fois un écran final pour choisir la valeur du paramètre. Cette fois, définissez la source de paramètre sur Contrôle. Cette opération remplit la liste déroulante ControlID avec les noms des contrôles de la page ; sélectionnez le CountryName contrôle dans la liste. Lorsque la page est d’abord visitée, la CountryName zone de texte est vide, donc aucun résultat n’est retourné et rien n’est affiché. Si vous souhaitez afficher des résultats par défaut, définissez la zone de texte DefaultValue en conséquence.

Définir la valeur du paramètre sur la valeur de contrôle CountryName

Figure 8 : Définir la valeur du paramètre sur la valeur de CountryName contrôle (cliquez pour afficher l’image de taille complète)

Le balisage déclaratif de ObjectDataSource diffère légèrement de notre premier exemple, à l’aide d’un ControlParameter au lieu de l’objet standard Parameter . A ControlParameter des propriétés supplémentaires pour spécifier le ID contrôle Web et la valeur de propriété à utiliser pour le paramètre (PropertyName). L’Assistant Configurer la source de données a été suffisamment intelligent pour déterminer que, pour une zone de texte, nous allons probablement utiliser la Text propriété pour la valeur du paramètre. Si, toutefois, vous souhaitez utiliser une valeur de propriété différente du contrôle Web, vous pouvez modifier la PropertyName valeur ici ou en cliquant sur le lien « Afficher les propriétés avancées » dans l’Assistant.

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

Lors de la première visite de la page, la CountryName zone de texte est vide. La méthode ObjectDataSource Select est toujours appelée par GridView, mais une valeur est Nothing passée à la GetSuppliersByCountry(country) méthode. TableAdapter convertit la Nothing valeur de base de données NULL (DBNull.Value), mais la requête utilisée par la GetSuppliersByCountry(country) méthode est écrite de telle sorte qu’elle ne retourne aucune valeur lorsqu’une NULL valeur est spécifiée pour le @CategoryID paramètre. Bref, aucun fournisseur n’est retourné.

Une fois que le visiteur entre dans un pays/une région, cependant, puis clique sur le bouton Afficher les fournisseurs pour provoquer une publication, la méthode ObjectDataSource Select est réapplicée, en passant la valeur du Text contrôle TextBox en tant que country paramètre.

Ces fournisseurs du Canada sont affichés

Figure 9 : Ces fournisseurs du Canada sont affichés (cliquez pour afficher l’image de taille complète)

Affichage de tous les fournisseurs par défaut

Au lieu d’afficher aucun des fournisseurs lors de la première consultation de la page, nous souhaitons afficher tous les fournisseurs au début, ce qui permet à l’utilisateur d’analyser la liste en entrant un nom de pays dans la Zone de texte. Lorsque TextBox est vide, la méthode de GetSuppliersByCountry(country) la SuppliersBLL classe est transmise Nothing pour son country paramètre d’entrée. Cette Nothing valeur est ensuite transmise à la méthode de DAL GetSupplierByCountry(country) , où elle est traduite en valeur de base de données NULL pour le @Country paramètre dans la requête suivante :

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

L’expression Country = NULL retourne toujours False, même pour les enregistrements dont Country la colonne a une NULL valeur ; par conséquent, aucun enregistrement n’est retourné.

Pour renvoyer tous les fournisseurs lorsque le pays TextBox est vide, nous pouvons augmenter la GetSuppliersByCountry(country) méthode dans la BLL pour appeler la GetSuppliers() méthode lorsque son paramètre de pays est Nothing et pour appeler la méthode du GetSuppliersByCountry(country) DAL dans le cas contraire. Cela aura pour effet de retourner tous les fournisseurs lorsqu’aucun pays n’est spécifié et que le sous-ensemble approprié de fournisseurs lorsque le paramètre pays est inclus.

Modifiez la GetSuppliersByCountry(country) méthode dans la SuppliersBLL classe en procédant comme suit :

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

Avec cette modification, la DeclarativeParams.aspx page affiche tous les fournisseurs lors de leur première visite (ou chaque fois que la CountryName zone de texte est vide).

Tous les fournisseurs sont désormais affichés par défaut

Figure 10 : Tous les fournisseurs sont désormais affichés par défaut (cliquez pour afficher l’image de taille complète)

Résumé

Pour utiliser des méthodes avec des paramètres d’entrée, nous devons spécifier les valeurs des paramètres de SelectParameters la collection ObjectDataSource. Différents types de paramètres permettent d’obtenir la valeur du paramètre à partir de différentes sources. Le type de paramètre par défaut utilise une valeur codée en dur, mais aussi facilement (et sans ligne de code) les valeurs de paramètre peuvent être obtenues à partir de la chaîne de requête, des variables de session, des cookies et même des valeurs entrées par l’utilisateur à partir de contrôles Web sur la page.

Les exemples que nous avons examinés dans ce tutoriel illustrent comment utiliser des valeurs de paramètre déclaratives. Toutefois, il peut arriver que nous devons utiliser une source de paramètre qui n’est pas disponible, telle que la date et l’heure actuelles, ou, si notre site utilise l’appartenance, l’ID d’utilisateur du visiteur. Pour ces scénarios, nous pouvons définir les valeurs de paramètre par programmation avant l’appel de la méthode de son objet sous-jacent. Nous allons voir comment procéder dans le tutoriel suivant.

Bonne programmation !

À propos de l’auteur

Scott Mitchell, auteur de sept livres ASP/ASP.NET et fondateur de 4GuysFromRolla.com, travaille avec les technologies Web Microsoft depuis 1998. Scott travaille en tant que consultant indépendant, formateur et écrivain. Son dernier livre est Sams Teach Yourself ASP.NET 2.0 en 24 heures. Il peut être accessible à mitchell@4GuysFromRolla.com. ou via son blog, qui peut être trouvé à http://ScottOnWriting.NET.

Merci spécial à

Cette série de tutoriels a été examinée par de nombreux réviseurs utiles. Le réviseur principal de ce tutoriel était Hilton Giesenow. Vous souhaitez consulter mes prochains articles MSDN ? Si c’est le cas, déposez-moi une ligne à mitchell@4GuysFromRolla.com.