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

L'enregistrement des données d'une application dans la base de données est plutôt simple quand vous utilisez une seule table de données et qu'aucune contrainte de clé étrangère n'est à prendre en compte. Mais quand vous devez enregistrer les données d'un dataset contenant au moins deux tables de données associées, vous devez envoyer les modifications à la base de données dans un ordre spécifique pour que ces contraintes ne soient pas enfreintes. Quand vous mettez à jour les données modifiées dans des tables associées, 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 correct, ou vous pouvez utiliser le composant TableAdapterManager.

Cette procédure pas à pas indique comment enregistrer les données associées à l'aide du composant TableAdapterManager. Pour plus d'informations sur l'encodage manuel des tables de données associées, 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 avez besoin des éléments suivants :

Création de l'application Windows

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

Pour créer l'application Windows

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

    Notes

    La mise à jour hiérarchique est prise en charge dans les projets Visual Basic et C#. Créez le projet dans l'un de ces langages.

  2. Attribuez le nom HierarchicalUpdateWalkthrough au projet.

  3. Sélectionnez Application Windows Forms et cliquez sur OK. Pour plus d'informations, consultez Développement d'applications clientes avec .NET Framework.

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

Création du dataset

Les tables associées étant nécessaires pour décrire les mises à jour hiérarchiques, la prochaine étape consiste à créer un dataset contenant les tables Customers et Orders de la base de données Northwind. Créez le dataset à 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 la configuration 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 liste déroulante, sélectionnez-la.

      ou

    • Cliquez sur Nouvelle connexion pour ouvrir la boîte de dialogue Ajouter/Modifier la connexion.

  5. Si la base de données requiert un mot de passe, sélectionnez l'option permettant d'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. Cochez les cases correspondant aux 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 liés aux données à créer par défaut

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

Pour définir le contrôle pour les éléments de la fenêtre Sources de données

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

  2. Remplacez les contrôles à créer pour la table Customers par des contrôles individuels en cliquant sur 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.

    Notes

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

Création du formulaire lié aux données

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

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

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

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

  2. Faites glisser le nœud Orders associé depuis la fenêtre Sources de données vers Form1.

    Notes

    Le nœud Orders associé est situé sous le nœud Fax de la table Customers et constitue un nœud enfant du nœud Customers.Le nœud Orders, qui apparaît en tant qu'homologue du nœud Customers, représente toutes les commandes de la table.Le nœud Orders, qui apparaît en tant que nœud enfant du nœud Customers, représente les commandes associées.

    Un contrôle DataGridView et une barre d'outils (BindingNavigator) pour parcourir les enregistrements apparaissent dans le formulaire. Un TableAdapter et un BindingSource apparaissent dans la barre d'état des composants.

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

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

Dès que vous déplacez des éléments depuis la fenêtre Sources de données, du code est automatiquement ajouté à l'événement Form_Load pour remplir chaque table (les méthodes TableAdapter.Fill). Du code est également ajouté à l'événement Click du bouton Enregistrer du BindingNavigator pour enregistrer les données du dataset dans la base de données (la 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 particulièrement, elle appelle la méthode EndEdit du premier BindingSource ajouté au formulaire. En d'autres termes, ce code n'est généré que pour la première table déplacée depuis la fenêtre Sources de données dans le formulaire. L'appel de EndEdit valide toutes les modifications en cours de tous les contrôles liés aux données 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 (la méthode TableAdapterManager.UpdateAll).

Notes

Le concepteur n'ajoute le code BindingSource.EndEdit que pour la première table déplacée dans le formulaire.Par conséquent, vous devez ajouter une ligne de code pour appeler la méthode BindingSource.EndEdit pour chaque table associée dans le formulaire.Dans cette procédure pas à pas, cela signifie que vous devez ajouter un appel à la méthode OrdersBindingSource.EndEdit.

Pour mettre à jour le code afin de valider les modifications des tables associées avant l'enregistrement

  1. Double-cliquez sur le bouton Enregistrer de 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 appelant la méthode CustomersBindingSource.EndEdit. Le code de l'événement Click du bouton Enregistrer doit ressembler à ce qui 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 d'une table enfant associée avant l'enregistrement des données dans une base de données, vous devez aussi peut-être valider les enregistrements parents récemment créés avant d'ajouter de nouveaux enregistrement enfants à un dataset. En d'autres termes, vous devez peut-être ajouter le nouvel enregistrement parent (Customer) au dataset avant que les contraintes de clé étrangère ne permettent d'ajouter de nouveaux enregistrements enfants (Orders) au dataset. Pour ce faire, vous pouvez utiliser l'événement BindingSource.AddingNew enfant.

Notes

Vous n'êtes peut-être pas obligé de valider les nouveaux enregistrements parents. Cela dépend du type de contrôle utilisé pour effectuer la liaison à votre source de données.Dans cette procédure pas à pas, vous utilisez des contrôles individuels pour effectuer la liaison à la table parente. Cela requiert le code supplémentaire pour valider le nouvel enregistrement parent.Si les enregistrements parents étaient affichés dans un contrôle de liaison complexe tel que DataGridView, cet appel supplémentaire de EndEdit pour l'enregistrement parent n'est pas nécessaire.En effet, la fonctionnalité sous-jacente de liaison aux données du contrôle gère la validation des nouveaux enregistrements.

Pour ajouter du code afin de valider les enregistrements parents dans le dataset 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 Création, 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 nouveau gestionnaire d'événements une ligne de code appelant la méthode CustomersBindingSource.EndEdit. Le code du gestionnaire d'événements OrdersBindingSource_AddingNew doit ressembler à ce qui 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 dataset. Les mises à jour hiérarchiques sont activées par défaut. Pour cette procédure pas à pas, vous n'avez donc 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 dataset dans le Concepteur de DataSet en double-cliquant sur le fichier NorthwindDataSet.xsd dans l'Explorateur de solutions.

  2. Sélectionnez une zone vide de 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 est définie sur True.

    Notes

    La définition de la propriété Mise à jour hiérarchique contrôle si le code est généré ou non avec un TableAdapterManager et contrôle la logique pour effectuer ou non des mises à jour hiérarchiques.Si HierarchicalUpdate est définie sur True, un TableAdapterManager est généré. Si HierarchicalUpdate est définie sur False, aucun TableAdapterManager n'est généré.

Test de l'application

Pour tester l'application

  1. Appuyez sur F5.

  2. Apportez quelques modifications aux données d'un ou plusieurs enregistrements dans chaque table.

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

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

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

Étapes suivantes

Selon les spécifications de votre application, vous pouvez exécuter différentes étapes après avoir enregistré les données associées dans l'application Windows. Vous pouvez apporter à cette procédure pas à pas les améliorations suivantes :

  • ajout d'une troisième table, telle que la table OrderDetails, et test d'une hiérarchie à trois tables ;

  • ajout d'un code de validation pour vérifier que les données respectent les conditions de l'application en plus des contraintes de la 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)

Concepts

Enregistrement des données

Autres ressources

Mise à jour hiérarchique

Objets DataSet, DataTable et DataView