Partager via


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

Mise à jour : novembre 2007

Lors de la modification de valeurs dans les contrôles liés aux données, les utilisateurs doivent sortir de l'enregistrement actif pour valider la valeur mise à jour dans la source de données sous-jacente à laquelle le contrôle est lié. Lorsque vous faites glisser des éléments de la Sources de données, fenêtre sur un formulaire, le premier élément que vous déplacez génère le code dans l'événement lié à un clic sur le bouton Enregistrer du BindingNavigator. Ce code appelle la méthode EndEdit du BindingSource. Par conséquent, l'appel à la méthode EndEdit est généré uniquement pour le premier BindingSource ajouté au 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).

Vous pouvez configurer votre application pour valider automatiquement des modifications, même si un utilisateur essaie d'enregistrer des données sans valider les modifications dans le cadre du processus d'enregistrement.

Remarque :

Le concepteur ajoute le code BindingSource.EndEdit uniquement pour le premier élément déposé sur un formulaire. Vous devez par conséquent ajouter une ligne de code pour appeler la méthode EndEdit pour chaque BindingSource sur le formulaire. Vous pouvez ajouter manuellement une ligne de code pour appeler la méthode EndEdit pour chaque BindingSource. Vous pouvez également ajouter la méthode EndEditOnAllBindingSources au formulaire et l'appeler avant d'effectuer un enregistrement.

Le code suivant utilise une requête LINQ (Language-Integrated Query) pour parcourir tous les composants BindingSource et appeler la méthode EndEdit pour chaque BindingSource sur un formulaire.

Pour appeler EndEdit pour tous les composants BindingSource sur un formulaire

  1. Ajoutez le code suivant au formulaire qui contient les composants BindingSource.

    Private Sub EndEditOnAllBindingSources()
        Dim BindingSourcesQuery = From bindingsources In Me.components.Components _
                      Where (TypeOf bindingsources Is Windows.Forms.BindingSource) _
                      Select bindingsources
    
        For Each bindingSource As Windows.Forms.BindingSource In BindingSourcesQuery
            bindingSource.EndEdit()
        Next
    End Sub
    
    private void EndEditOnAllBindingSources()
    {
        var BindingSourcesQuery =
            from Component bindingSources in this.components.Components
            where bindingSources is BindingSource
            select bindingSources;
    
        foreach (BindingSource bindingSource in BindingSourcesQuery)
        {
            bindingSource.EndEdit();
        }
    }
    
  2. Ajoutez la ligne de code suivante juste avant tous les appels pour enregistrer les données du formulaire (méthode TableAdapterManager.UpdateAll()) :

    Me.EndEditOnAllBindingSources()
    
    EndEditOnAllBindingSources();
    

Voir aussi

Concepts

Vue d'ensemble de la mise à jour hiérarchique

Vue d'ensemble de TableAdapterManager

Vue d'ensemble de TableAdapter

Référence

Vue d'ensemble du composant BindingSource