Procédure pas à pas : enregistrement des données de tables de données connexes (Mise à jour hiérarchique)

Mise à jour : novembre 2007

L'enregistrement des données d'une application dans la base de données est une opération assez simple lorsque vous utilisez une table individuelle de données et qu'aucune contrainte de clé étrangère ne doit être prise en compte. Cependant, lorsque vous devez enregistrer des données d'un groupe de données qui contient au moins deux tables de données connexes, vous devez envoyer les modifications à la base de données dans un ordre spécifique afin que les contraintes ne soient pas violées. Lorsque vous mettez à jour des données modifiées dans des tables connexes, vous pouvez fournir la logique de programmation pour extraire les sous-ensembles spécifiques de données de chaque table de données et envoyer les mises à jour à la base de données dans l'ordre approprié ou vous pouvez utiliser le composant TableAdapterManager défini dans Visual Studio 2008.

Cette procédure pas à pas indique comment enregistrer les données connexes en utilisant le composant TableAdapterManager. Pour plus d'informations sur le codage de mises à jour manuelles de tables de données connexes, consultez Procédure pas à pas : enregistrement de données dans une base de données (plusieurs tables).

Composants requis

Pour exécuter cette procédure pas à pas, vous devez :

Création d'une application Windows

La première étape de cette procédure pas à pas consiste à créer une application Windows.

Pour créer une application Windows

  1. Dans le menu Fichier, créez un nouveau projet.

    Remarque :

    La mise à jour hiérarchique est prise en charge dans les projets Visual Basic et C#, vous pouvez donc créer le projet dans l'un de ces langages.

  2. Nommez le projet HierarchicalUpdateWalkthrough.

  3. Sélectionnez Application Windows Forms, puis cliquez sur OK. Pour plus d'informations, consultez Création d'applications Windows.

    Le projet HierarchicalUpdateWalkthrough est créé et ajouté à l'Explorateur de solutions.

Création du groupe de données

Étant donné qu'il est nécessaire que les tables connexes présentent les mises à jour hiérarchiques, l'étape suivante consiste à créer un groupe de données qui contient les tables Customers et Orders de la base de données Northwind. Créez le groupe de données à l'aide de l'Assistant Configuration de source de données. Vous devez avoir accès à l'exemple de base de données Northwind pour créer la connexion. Pour plus d'informations sur l'installation de l'exemple de base de données Northwind, consultez Comment : installer des exemples de bases de données.

Pour créer le groupe de données

  1. Dans le menu Données, cliquez sur Afficher les sources de données.

  2. Dans la fenêtre Sources de données, cliquez sur Ajouter une nouvelle source de données pour démarrer l'Assistant Configuration de source de données.

  3. Dans la page Choisir un type de source de données, cliquez sur Base de données, puis sur Suivant.

  4. Dans la page Choisir votre connexion de données, effectuez l'une des opérations suivantes :

    • Si une connexion de données à l'exemple de base de données Northwind est disponible dans la zone de liste déroulante, sélectionnez-la.

      - ou -

    • Sélectionnez Nouvelle connexion pour ouvrir la boîte de dialogue Ajouter/Modifier la connexion. Pour plus d'informations, consultez Ajouter/Modifier une connexion, boîte de dialogue (Général).

  5. Si un mot de passe est requis pour la base de données, sélectionnez l'option pour inclure les données sensibles, puis cliquez sur Suivant.

  6. Cliquez sur Suivant dans la page Enregistrer la chaîne de connexion dans le fichier de configuration de l'application.

  7. Développez le nœud Tables dans la page Choisir vos objets de base de données.

  8. Activez les cases à cocher pour les tables Customers et Orders, puis cliquez sur Terminer.

    NorthwindDataSet est créé et ajouté à votre projet et les tables apparaissent dans la fenêtre Sources de données.

Modification des contrôles par défaut liés aux données à créer

Après avoir rempli la fenêtre Sources de données, vous pouvez choisir les contrôles qui doivent être créés lorsque vous faites glisser des éléments vers un Windows Form. Dans le cadre de cette procédure pas à pas, les données de la table Customers sont affichées dans les contrôles individuels (Détails). Les données de la table Orders sont affichées dans un contrôle DataGridView (DataGridView).

Pour définir les contrôles des éléments contenus dans la fenêtre Sources de données

  1. Développez le nœud Customers dans la fenêtre Sources de données.

  2. Vous pouvez modifier les contrôles qui doivent être créés pour la table Customers en contrôles individuels en sélectionnant Détails dans la liste de contrôles du nœud Customers. Pour plus d'informations, consultez Comment : définir le contrôle à créer lors d'une opération de glisser-déplacer à partir de la fenêtre Sources de données.

    Remarque :

    La table Orders utilise le contrôle par défaut, DataGridView.

Création du formulaire lié aux données

Une fois que vous avez sélectionné les contrôle dans la fenêtre Sources de données, vous pouvez créer les contrôles liés aux données en faisant glisser des éléments vers le formulaire.

Pour créer des contrôles liés aux données pour les données Customers et Orders

  1. Faites glisser le nœud Customers depuis la fenêtre Sources de données vers Form1.

    Les contrôles liés aux données avec des étiquettes descriptives apparaissent sur le formulaire avec un composant TableAdapterManager et une barre d'outils (BindingNavigator) pour parcourir les enregistrements. Un groupe de données typé, un TableAdapter et un BindingSource apparaissent dans la barre d'état des composants.

  2. Faites glisser le nœud connexe Orders depuis la fenêtre Sources de données jusqu'à Form1.

    Remarque :

    Le nœud connexe Orders se trouve sous le nœud Fax de la table Customers et est un nœud enfant du nœud Customers. Le nœud Orders qui apparaît comme un homologue du nœud Customers représente toutes les commandes dans la table. Le nœud Orders qui apparaît comme un nœud enfant du nœud Customers représente les commandes connexes.

    Un contrôle DataGridView et une barre d'outils (BindingNavigator) de navigation au sein des enregistrements apparaissent sur le formulaire. Un TableAdapter et un BindingSource apparaissent dans la barre d'état des composants.

Modification du code d'enregistrement généré pour exécuter la mise à jour hiérarchique

Enregistrez les modifications des tables de données connexes du groupe de données dans la base de données en appelant la méthode TableAdapterManager.UpdateAll et en passant le nom du groupe de données qui contient les tables connexes. Par exemple, exécutez la méthode TableAdapterManager.UpdateAll(NorthwindDataset) pour envoyer des mises à jour de toutes les tables dans NorthwindDataset à la base de données principale.

Après avoir déplacé les éléments à partir de la fenêtre Sources de données, le code est automatiquement ajouté à l'événement Form_Load pour remplir chaque table (méthodes TableAdapter.Fill). Le code est également ajouté à l'événement lié à un clic sur le bouton Enregistrer du BindingNavigator pour enregistrer les données du groupe de données dans la base de données (méthode TableAdapterManager.UpdateAll).

Le code d'enregistrement généré contient également une ligne de code qui appelle la méthode CustomersBindingSource.EndEdit. Plus spécifiquement, il appelle la méthode EndEdit du premier BindingSource ajouté au formulaire. En d'autres termes, ce code est généré uniquement pour la première table déplacée depuis la fenêtre Sources de données sur le formulaire. L'appel EndEdit valide toutes les modifications in-process dans tous les contrôles liés aux données actuellement modifiés. Par conséquent, si un contrôle lié aux données a encore le focus et que vous cliquez sur le bouton Enregistrer, toutes les modifications en attente dans ce contrôle sont validées avant l'enregistrement réel (méthode TableAdapterManager.UpdateAll).

Remarque :

Le concepteur ajoute seulement le code BindingSource.EndEdit pour la première table déposée sur le formulaire. Par conséquent, vous devez ajouter une ligne de code pour appeler la méthode BindingSource.EndEdit pour chaque table connexe sur le formulaire. Pour cette procédure pas à pas, cela signifie que vous devez ajouter un appel à la méthode OrdersBindingSource.EndEdit.

Pour mettre à jour le code pour valider les modifications aux tables connexes avant d'enregistrer

  1. Double-cliquez sur le bouton Enregistrer sur le BindingNavigator pour ouvrir Form1 dans l'éditeur de code.

  2. Ajoutez une ligne de code pour appeler la méthode OrdersBindingSource.EndEdit après la ligne qui appelle la méthode CustomersBindingSource.EndEdit. Le code dans l'événement lié à un clic sur le bouton Enregistrer doit se présenter comme suit :

    Me.Validate()
    Me.CustomersBindingSource.EndEdit()
    Me.OrdersBindingSource.EndEdit()
    Me.TableAdapterManager.UpdateAll(Me.NorthwindDataSet)
    
    this.Validate();
    this.customersBindingSource.EndEdit();
    this.ordersBindingSource.EndEdit();
    this.tableAdapterManager.UpdateAll(this.northwindDataSet);
    

Outre la validation des modifications sur une table enfant connexe avant d'enregistrer les données dans une base de données, vous pouvez également être amené à valider des enregistrements parents récemment créés avant d'ajouter les nouveaux enregistrements enfants à un groupe de données. En d'autres termes, vous pouvez être amené à ajouter le nouvel enregistrement parent (Customer) au groupe de données avant que les contraintes de clé étrangère permettent d'ajouter de nouveaux enregistrements enfants (Orders) au groupe de données. Pour accomplir cela, vous pouvez utiliser l'événement BindingSource.AddingNew enfant.

Remarque :

Il est possible que vous ayez à valider de nouveaux enregistrements parents ; cela dépend du type de contrôle utilisé pour créer une liaison avec votre source de données. Dans cette procédure pas à pas, vous utilisez des contrôles individuels pour créer une liaison avec la table parente ; cela requiert que le code supplémentaire valide le nouvel enregistrement parent. Si les enregistrements parents ont été affichés dans un contrôle de liaison complexe comme le DataGridView, cet appel EndEdit supplémentaire pour l'enregistrement parent n'est pas nécessaire. Cela s'explique par le fait que la fonctionnalité de liaison de données sous-jacente des poignées de contrôle gère la validation des nouveaux enregistrements.

Pour ajouter du code pour valider des enregistrements parents dans le groupe de données avant d'ajouter de nouveaux enregistrements enfants

  1. Créez un gestionnaire d'événements pour l'événement OrdersBindingSource.AddingNew.

    • Ouvrez Form1 en mode Design, cliquez sur OrdersBindingSource dans la barre d'état des composants, sélectionnez Événements dans la fenêtre Propriétés, puis double-cliquez sur l'événement AddingNew.
  2. Ajoutez au gestionnaire d'événements une ligne de code qui appelle la méthode CustomersBindingSource.EndEdit. Le code dans le gestionnaire d'événements OrdersBindingSource_AddingNew doit se présenter comme suit :

    Me.CustomersBindingSource.EndEdit()
    
    this.customersBindingSource.EndEdit();
    

Vérification de l'activation des mises à jour hiérarchiques

Les mises à jour hiérarchiques sont activées et désactivées en définissant la propriété Mise à jour hiérarchique du groupe de données. Les mises à jour hiérarchiques sont activées par défaut, donc pour cette procédure pas à pas, vous ne devez pas modifier la valeur de la propriété Mise à jour hiérarchique.

Pour vérifier que les mises à jour hiérarchiques sont activées

  1. Ouvrez le groupe de données dans le Concepteur de DataSet en double-cliquant sur le fichier NorthwindDataSet.xsd dans l'Explorateur de solutions.

  2. Sélectionner une zone vide dans l'aire de conception.

  3. Recherchez la propriété Mise à jour hiérarchique dans la Propriétés, fenêtre et vérifiez qu'elle a la valeur True.

    Remarque :

    Le paramètre de la propriété Mise à jour hiérarchique définit le contrôle, si le code est généré avec un TableAdapterManager et la logique pour effectuer ou non les mises à jour hiérarchiques. Si vous affectez la valeur True à la propriété Mise à jour hiérarchique, cela génère un TableAdapterManager et si vous affectez la valeur False à la propriété Mise à jour hiérarchique, cela ne génère pas de TableAdapterManager.

Test de l'application

Pour tester l'application

  1. Appuyez sur F5.

  2. Modifiez les données d'un ou plusieurs enregistrements dans chaque table.

  3. Ajoutez un nouveau client, puis ajoutez une nouvelle commande pour ce client.

  4. Cliquez sur le bouton Enregistrer. Le TableAdapterManager gère la logique requise pour toutes les mises à jour connexes.

  5. Vérifiez les valeurs contenues dans la base de données pour vérifier que les modifications ont été enregistrées dans chaque table.

Étapes suivantes

Selon les spécifications de votre application, vous pouvez exécuter différentes étapes après l'enregistrement des données connexes dans une application Windows. Plusieurs améliorations peuvent être apportées à cette application, notamment :

  • Ajout d'une troisième table, telle que la table OrderDetails et gestion d'une hiérarchie de trois tables.

  • Ajout de code de validation pour vérifier que les données répondent aux spécifications de l'application en plus de contraintes de base de données. Pour plus d'informations, consultez Validation des données.

Voir aussi

Tâches

Comment : configurer des contraintes de clé étrangère dans un groupe de données

Comment : définir l'ordre lors de l'exécution d'une mise à jour hiérarchique

Comment : valider des modifications in-process sur des contrôles liés aux données avant d'enregistrer des données

Comment : implémenter une mise à jour hiérarchique dans des projets Visual Studio existants

Procédure pas à pas : enregistrement des données de tables de données connexes (Mise à jour hiérarchique)

Autres ressources

Mise à jour hiérarchique

Enregistrement des données

Objets DataSet, DataTable et DataView (ADO.NET)