Paramètres déclaratifs (VB)
par Scott Mitchell
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.
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.
Figure 2 : Sélectionner la classe (cliquez pour afficher l’image ProductsBLL
de taille complète)
Étant donné que nous voulons afficher des informations sur un produit particulier, nous voulons utiliser la GetProductByProductID(productID)
méthode.
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 productID
seul. À 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.
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, parameterID
il 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 InsertMethod
UpdateMethod
proprié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).
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.
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.
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.
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.
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).
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.