Partager via


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

 

Date de publication : mars 2016

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.

Notes

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 itérer sur 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 void EndEditOnAllBindingSources()
            {
                var BindingSourcesQuery =
                    from Component bindingSources in this.components.Components
                    where bindingSources is BindingSource
                    select bindingSources;
    
                foreach (BindingSource bindingSource in BindingSourcesQuery)
                {
                    bindingSource.EndEdit();
                }
            }
    
        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
    
  2. Ajoutez la ligne de code suivante juste avant tous les appels pour enregistrer les données du formulaire (méthode TableAdapterManager.UpdateAll()) :

                EndEditOnAllBindingSources();
    
            Me.EndEditOnAllBindingSources()
    

Voir aussi

Vue d'ensemble de la mise à jour hiérarchique
Vue d'ensemble de TableAdapterManager
Vue d'ensemble de TableAdapter
Vue d'ensemble du composant BindingSource