Définition par programmation des valeurs des paramètres de ObjectDataSource (C#)
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 transmettre 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 qui n’est pas déjà prise en compte par l’un des objets de source Parameter
de données intégrés. Si notre site prenait en charge les comptes d’utilisateur, nous pourrions définir le paramètre en fonction de l’ID d’utilisateur du visiteur actuellement connecté. Ou nous devrons peut-être personnaliser la valeur du paramètre avant de l’envoyer à la méthode de l’objet sous-jacent d’ObjectDataSource.
Chaque fois que la méthode objectDataSource Select
est appelée, l’objet ObjectDataSource déclenche d’abord son événement Selecting. La méthode de l’objet sous-jacent ObjectDataSource est ensuite appelée. Une fois cette opération terminée, l’événement Selected 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 de ObjectDataSource peuvent être définies ou personnalisées dans un gestionnaire d’événements pour l’événement Selecting
.
Figure 1 : L’objetDataSource Selected
et Selecting
les événements se déclenchent avant et après l’appel de la méthode de l’objet sous-jacent (cliquez 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 int
et retourne un EmployeesDataTable
objet rempli avec les employés dont l’anniversaire d’embauche est spécifié Month
. Notre exemple définit ce paramètre par programmation en fonction du mois en cours, en affichant la liste « Anniversaires d’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 qui HireDate
se sont produits dans un mois spécifié. Pour fournir cette fonctionnalité conformément à notre architecture, nous devons d’abord créer une méthode dans EmployeesTableAdapter
qui correspond à l’instruction SQL appropriée. Pour ce faire, commencez par ouvrir le Northwind Typed DataSet. Cliquez avec le bouton droit sur l’étiquette EmployeesTableAdapter
et choisissez Ajouter une requête.
Figure 2 : Ajouter une nouvelle requête à (Cliquez pour afficher l’imageEmployeesTableAdapter
en 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 retourner le mois de la HireDate
colonne.
@HiredBeforeDate Parameter » />
Figure 3 : Renvoyer 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 : Choisir des noms de méthodes plus appropriés que FillBy
et GetDataBy
(Cliquer 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 permettant d’accéder 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 (cliquer pour afficher l’image en taille réelle)
Étape 2 : Ajout de laGetEmployeesByHiredDateMonth(month)
méthode à la couche de 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.cs
fichier et ajoutez la méthode suivante :
[System.ComponentModel.DataObjectMethodAttribute
(System.ComponentModel.DataObjectMethodType.Select, false)]
public Northwind.EmployeesDataTable GetEmployeesByHiredDateMonth(int month)
{
return Adapter.GetEmployeesByHiredDateMonth(month);
}
Comme avec nos autres méthodes de cette classe, GetEmployeesByHiredDateMonth(month)
il vous suffit d’appeler 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 valeur définie sur SelectMethod
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 source de la month
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 None et cliquez sur Terminer.
Figure 8 : Laissez le paramètre Source défini sur None (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 ObjectDataSource Selecting
. Pour ce faire, accédez au mode Création et double-cliquez sur ObjectDataSource. Vous pouvez également sélectionner l’ObjetDataSource, 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.
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 deux 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 ce qui suit au gestionnaire d’événements Selecting
:
protected void ObjectDataSource1_Selecting
(object sender, ObjectDataSourceSelectingEventArgs e)
{
e.InputParameters["month"] = DateTime.Now.Month;
}
Lorsque vous visitez cette page par le biais d’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 : 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 de l’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 des paramètres par programmation. Il nous suffit de créer un gestionnaire d’événements pour l’événement ObjectDataSource, qui se Selecting
déclenche avant que la méthode de l’objet sous-jacent soit appelée, et de définir manuellement les valeurs d’un ou de plusieurs paramètres via la InputParameters
collection.
Ce tutoriel conclut la section Rapports de base. Le tutoriel suivant lance 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 un rapport master dans un rapport détaillé.
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 Hours. Il est accessible à l’adressemitchell@4GuysFromRolla.com . ou via son blog, qui se trouve à l’adresse http://ScottOnWriting.NET.
Remerciements spéciaux à
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.