Partager via


Définition par programmation des valeurs des paramètres de ObjectDataSource (C#)

par Scott Mitchell

Télécharger le PDF

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 .

Les événements sélectionnés et sélectionnés d’ObjectDataSource se déclenchent avant et après l’appel de la méthode de l’objet sous-jacent

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 Monthd’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.

Ajouter une nouvelle requête à EmployeesTableAdapter

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.

Retourne uniquement les lignes où la colonne HireDate est inférieure ou égale à la <span class=@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.

Choisissez des noms de méthode plus appropriés que FillBy et GetDataBy

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é.

Les nouvelles méthodes apparaissent dans l’aire de conception du DataSet

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 SelectMethodGetEmployeesByHiredDateMonth(month).

Utiliser la classe EmployeesBLL

Figure 6 : Utiliser la EmployeesBLL classe (cliquer pour afficher l’image en taille réelle)

Sélectionner à partir de la méthode GetEmployeesByHiredDateMonth(month)

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.

Laissez la source du paramètre définie sur None

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.

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

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.

Les employés dont les anniversaires de ce mois-ci sont affichés

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.