Définition par programmation des valeurs des paramètres d’ObjectDataSource (VB)
par Scott Mitchell
Dans ce tutoriel, nous allons examiner l’ajout d’une méthode à notre DAL et BLL qui accepte un paramètre d’entrée unique et retourne des données. L’exemple définit ce paramètre par programmation.
Introduction
Comme nous l’avons vu dans le tutoriel précédent, un certain nombre d’options sont disponibles pour passer de manière déclarative des valeurs de paramètres aux méthodes de ObjectDataSource. Si la valeur du paramètre est codée en dur, provient d’un contrôle Web sur la page ou se trouve dans toute autre source lisible par un objet de source Parameter
de données, par exemple, cette valeur peut être liée au paramètre d’entrée sans écrire de ligne de code.
Toutefois, il peut arriver que la valeur du paramètre provient d’une source non encore prise en compte par l’un des objets de source Parameter
de données intégrés. Si notre site a pris en charge des comptes d’utilisateur, nous pouvons définir le paramètre en fonction de l’ID d’utilisateur du visiteur actuellement connecté. Vous devrez peut-être personnaliser la valeur du paramètre avant de l’envoyer à la méthode de l’objet sous-jacent ObjectDataSource.
Chaque fois que la méthode de Select
ObjectDataSource est appelée, ObjectDataSource déclenche d’abord son événement Selecting. La méthode de l’objet sous-jacent ObjectDataSource est ensuite appelée. Une fois que l’événement sélectionné d’ObjectDataSource se déclenche (la figure 1 illustre cette séquence d’événements). Les valeurs de paramètre passées à la méthode de l’objet sous-jacent ObjectDataSource peuvent être définies ou personnalisées dans un gestionnaire d’événements pour l’événement Selecting
.
Figure 1 : La méthode et les événements d’ObjectDataSource Selected
Selecting
sont déclenchés avant et après l’appel de la méthode de l’objet sous-jacent (cliquer pour afficher l’image en taille réelle)
Dans ce tutoriel, nous allons examiner l’ajout d’une méthode à notre DAL et BLL qui accepte un paramètre Month
d’entrée unique , de type Integer
et retourne un EmployeesDataTable
objet rempli avec les employés qui ont leur anniversaire d’embauche dans le spécifié Month
. Notre exemple définit ce paramètre par programmation en fonction du mois en cours, affichant la liste « Anniversaires des employés ce mois-ci ».
C’est parti !
Étape 1 : Ajout d’une méthode àEmployeesTableAdapter
Pour notre premier exemple, nous devons ajouter un moyen de récupérer les employés dont HireDate
l’événement s’est produit au cours d’un mois spécifié. Pour fournir cette fonctionnalité conformément à notre architecture, nous devons d’abord créer une méthode qui EmployeesTableAdapter
correspond à l’instruction SQL appropriée. Pour ce faire, commencez par ouvrir le DataSet de type Northwind. Cliquez avec le bouton droit sur l’étiquette EmployeesTableAdapter
et choisissez Ajouter une requête.
Figure 2 : Ajouter une nouvelle requête au EmployeesTableAdapter
(Cliquez pour afficher l’image de taille réelle)
Choisissez d’ajouter une instruction SQL qui retourne des lignes. Lorsque vous atteignez l’écran Spécifier une SELECT
instruction, l’instruction par défaut SELECT
pour le EmployeesTableAdapter
est déjà chargée. Ajoutez simplement la WHERE
clause : WHERE DATEPART(m, HireDate) = @Month
. DATEPART est une fonction T-SQL qui retourne une partie de date particulière d’un datetime
type ; dans ce cas, nous utilisons DATEPART
pour renvoyer le mois de la HireDate
colonne.
@HiredBeforeDate Parameter » />
Figure 3 : Retourner uniquement les lignes où la HireDate
colonne est inférieure ou égale au @HiredBeforeDate
paramètre (cliquez pour afficher l’image en taille réelle)
Enfin, remplacez les noms de FillBy
méthode et GetDataBy
par FillByHiredDateMonth
et GetEmployeesByHiredDateMonth
, respectivement.
Figure 4 : Choisissez des noms de méthode plus appropriés que FillBy
et GetDataBy
(Cliquez pour afficher l’image en taille réelle)
Cliquez sur Terminer pour terminer l’Assistant et revenir à l’aire de conception du DataSet. Le EmployeesTableAdapter
doit maintenant inclure un nouvel ensemble de méthodes d’accès aux employés embauchés au cours d’un mois spécifié.
Figure 5 : Les nouvelles méthodes apparaissent dans l’aire de conception du DataSet (cliquez pour afficher l’image en taille réelle)
Étape 2 : Ajout de laGetEmployeesByHiredDateMonth(month)
méthode à la couche logique métier
Étant donné que notre architecture d’application utilise une couche distincte pour la logique métier et la logique d’accès aux données, nous devons ajouter une méthode à notre BLL qui appelle le DAL pour récupérer les employés embauchés avant une date spécifiée. Ouvrez le EmployeesBLL.vb
fichier et ajoutez la méthode suivante :
<System.ComponentModel.DataObjectMethodAttribute _
(System.ComponentModel.DataObjectMethodType.Select, False)> _
Public Function GetEmployeesByHiredDateMonth(ByVal month As Integer) _
As Northwind.EmployeesDataTable
Return Adapter.GetEmployeesByHiredDateMonth(month)
End Function
Comme pour nos autres méthodes de cette classe, GetEmployeesByHiredDateMonth(month)
il suffit d’appeler vers le bas dans le DAL et de retourner les résultats.
Étape 3 : affichage des employés dont l’anniversaire d’embauche est ce mois-ci
La dernière étape de cet exemple consiste à afficher les employés dont l’anniversaire d’embauche est ce mois-ci. Commencez par ajouter un GridView à la ProgrammaticParams.aspx
page dans le BasicReporting
dossier et ajoutez un nouvel ObjetDataSource comme source de données. Configurez ObjectDataSource pour utiliser la EmployeesBLL
classe avec la SelectMethod
valeur définie sur GetEmployeesByHiredDateMonth(month)
.
Figure 6 : Utiliser la EmployeesBLL
classe (cliquer pour afficher l’image en taille réelle)
Figure 7 : Sélectionner à partir de la GetEmployeesByHiredDateMonth(month)
méthode (Cliquer pour afficher l’image en taille réelle)
L’écran final nous demande de fournir la month
source de la valeur de paramètre. Étant donné que nous allons définir cette valeur par programmation, laissez la source du paramètre définie sur l’option Par défaut Aucun, puis cliquez sur Terminer.
Figure 8 : Laissez la source de paramètre définie sur Aucun (Cliquez pour afficher l’image en taille réelle)
Cela crée un Parameter
objet dans la collection ObjectDataSource qui n’a SelectParameters
pas de valeur spécifiée.
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server"
OldValuesParameterFormatString="original_{0}"
SelectMethod="GetEmployeesByHiredDateMonth" TypeName="EmployeesBLL">
<SelectParameters>
<asp:Parameter Name="month" Type="Int32" />
</SelectParameters>
</asp:ObjectDataSource>
Pour définir cette valeur par programmation, nous devons créer un gestionnaire d’événements pour l’événement Selecting
ObjectDataSource. Pour ce faire, accédez au mode Création et double-cliquez sur ObjectDataSource. Vous pouvez également sélectionner objectDataSource, accéder à la Fenêtre Propriétés, puis cliquer sur l’icône éclair. Ensuite, double-cliquez dans la zone de texte en regard de l’événement Selecting
ou tapez le nom du gestionnaire d’événements que vous souhaitez utiliser. En troisième option, vous pouvez créer le gestionnaire d’événements en sélectionnant ObjectDataSource et son Selecting
événement dans les deux listes déroulantes en haut de la classe code-behind de la page.
Figure 9 : Cliquez sur l’icône Lightning Bolt dans la fenêtre Propriétés pour répertorier les événements d’un contrôle Web
Les trois approches ajoutent un nouveau gestionnaire d’événements pour l’événement Selecting
ObjectDataSource à la classe code-behind de la page. Dans ce gestionnaire d’événements, nous pouvons lire et écrire dans les valeurs de paramètre à l’aide e.InputParameters(parameterName)
de , où parameterName
est la valeur de l’attribut Name
dans la <asp:Parameter>
balise (la InputParameters
collection peut également être indexée de manière orale, comme dans e.InputParameters(index)
). Pour définir le paramètre sur month
le mois en cours, ajoutez les éléments suivants au gestionnaire d’événements Selecting
:
Protected Sub ObjectDataSource1_Selecting _
(sender As Object, e As ObjectDataSourceSelectingEventArgs) _
Handles ObjectDataSource1.Selecting
e.InputParameters("month") = DateTime.Now.Month
End Sub
Lorsque vous visitez cette page via un navigateur, nous pouvons voir qu’un seul employé a été embauché ce mois-ci (mars) Laura Callahan, qui travaille avec l’entreprise depuis 1994.
Figure 10 : Les employés dont les anniversaires de ce mois sont affichés (cliquez pour afficher l’image en taille réelle)
Résumé
Bien que les valeurs des paramètres d’ObjectDataSource puissent généralement être définies de manière déclarative, sans nécessiter de ligne de code, il est facile de définir les valeurs de paramètre par programmation. Il suffit de créer un gestionnaire d’événements pour l’événement ObjectDataSource, qui se Selecting
déclenche avant l’appel de la méthode de l’objet sous-jacent, et de définir manuellement les valeurs d’un ou plusieurs paramètres via la InputParameters
collection.
Ce tutoriel termine la section Rapports de base. Le tutoriel suivant démarre la section Filtrage et Master-Details scénarios, dans laquelle nous allons examiner les techniques permettant au visiteur de filtrer des données et d’explorer à partir d’un rapport master dans un rapport de détails.
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 comme consultant indépendant, formateur et écrivain. Son dernier livre est Sams Teach Yourself ASP.NET 2.0 in 24 Heures. Il est accessible à l’adressemitchell@4GuysFromRolla.com . ou via son blog, qui peut être trouvé à l’adresse http://ScottOnWriting.NET.
Un 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.