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.

Présentation

Comme nous l’avons vu dans le didacticiel précédent, un certain nombre d’options sont disponibles pour transmettre de manière déclarative des valeurs de paramètre 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 n’importe quelle 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 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é. Vous devrez peut-être personnaliser la valeur du paramètre avant de l’envoyer à la méthode de l’objet sous-jacent de ObjectDataSource.

Chaque fois que la méthode ObjectDataSource est appelée, ObjectDataSource déclenche d’abord Select son événement Selecting. La méthode de l’objet sous-jacent d’ObjectDataSource est ensuite appelée. Une fois que cela est terminé, l'événement Selected de l'ObjectDataSource se déclenche (la figure 1 illustre cette séquence d’événements). Les valeurs de paramètre transmises à 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 .

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

Figure 1 : Les événements de Selected et Selecting d'ObjectDataSource se déclenchent avant et après l'appel de la méthode de son objet sous-jacent (cliquez pour afficher l’image en taille réelle)

Dans ce tutoriel, nous verrons comment ajouter une méthode à notre DAL et BLL qui accepte un unique paramètre d'entrée Month, de type int, et retourne un objet EmployeesDataTable rempli des employés qui ont leur anniversaire d'embauche dans la période spécifiée Month. Notre exemple définit ce paramètre par programmation en fonction du mois en cours, affichant la liste « Employee Anniversaries This Month ».

Commençons !

É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 s’est produit durant 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 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 à l’objet EmployeesTableAdapter (Cliquez pour afficher l’image de taille complète)

Choisissez d’ajouter une instruction SQL qui retourne des lignes. Lorsque vous atteignez l’écran Spécifier une instruction SELECT, l’instruction SELECT par défaut du EmployeesTableAdapter sera 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.

Renvoyer uniquement les lignes où la colonne HireDate est inférieure ou égale au paramètre @HiredBeforeDate "

Figure 3 : Renvoyer uniquement les lignes où la HireDate colonne est inférieure ou égale au @HiredBeforeDate paramètre (cliquez pour afficher l’image de taille complète)

Enfin, remplacez les noms des méthodes FillBy et GetDataBy par FillByHiredDateMonth et GetEmployeesByHiredDateMonth, respectivement.

Choisir 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 (Cliquez pour afficher l’image de taille complète)

Cliquez sur Terminer pour terminer l’Assistant et revenir à la surface de conception de DataSet. EmployeesTableAdapter doit maintenant inclure un nouvel ensemble de méthodes pour accéder aux employés embauchés au cours d’un mois spécifié.

Les nouvelles méthodes apparaissent dans la surface de conception du DataSet

Figure 5 : Les nouvelles méthodes s’affichent dans l’aire de conception du DataSet (cliquez pour afficher l’image de taille complète)

É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 au 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) effectue simplement un appel au DAL et renvoie les résultats.

Étape 3 : affichage des employés dont l’anniversaire d’embauche est ce mois-ci

Notre dernière étape pour 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 du BasicReporting dossier et ajoutez un nouvel ObjectDataSource comme source de données. Configurez ObjectDataSource pour utiliser EmployeesBLL la classe avec SelectMethod défini à GetEmployeesByHiredDateMonth(month).

Utiliser la classe EmployeesBLL

Figure 6 : Utiliser la EmployeesBLL classe (Cliquez pour voir l'image en taille réelle)

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

Figure 7 : Sélectionner depuis la méthode GetEmployeesByHiredDateMonth(month) (Cliquez pour afficher l’image de taille complète)

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 None par défaut, puis cliquez sur Terminer.

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

Figure 8 : Laissez la source du paramètre définie sur Aucun (cliquez pour afficher l’image de taille complète)

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 à l’affichage 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.

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 de e.InputParameters[parameterName], où parameterName est la valeur de l’attribut Name dans la balise <asp:Parameter> (la collection InputParameters peut également être indexée de manière ordinale, comme dans e.InputParameters[index]). Pour définir le paramètre du mois en cours, ajoutez les éléments suivants au gestionnaire d’événements month :

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 a été avec l’entreprise depuis 1994.

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

Figure 10 : Les employés dont les anniversaires sont affichés ce mois-ci (cliquez pour afficher l’image de taille complète)

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 des paramètres par programmation. Il nous suffit de créer un gestionnaire d’événements pour l’événement Selecting ObjectDataSource, qui se 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 conclut la section Création de rapports de base. Le tutoriel suivant lance la section Filtrage et Scénarios Master-Details, dans laquelle nous allons examiner les techniques permettant au visiteur de filtrer les données et de passer du rapport principal au 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 en tant que consultant indépendant, formateur et écrivain. Son dernier livre est Sams Teach Yourself ASP.NET 2.0 en 24 heures. On peut le joindre à mitchell@4GuysFromRolla.com.

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.