Binding Forms

Résolu
thorgal1612 Messages postés 117 Date d'inscription dimanche 14 novembre 2004 Statut Membre Dernière intervention 19 janvier 2008 - 18 mars 2007 à 11:58
thorgal1612 Messages postés 117 Date d'inscription dimanche 14 novembre 2004 Statut Membre Dernière intervention 19 janvier 2008 - 21 mars 2007 à 16:29
Bonjour,

J'ai encore besoin de votre. J'ai regardé les Webcasts de Mistu sur le databinding avancé et j'ai essayé de faire un peu la même chose.
J'ai un formulaire frmListeArticle avec un datagridview binder sur une collection d'objet.
J'ai un bouton qui permet d'accéder au détail de l'objet (frmEditArticle).

Le code sur l'événement click de mon bouton :
    frmEditArticle.EditArticle((ArticleEntity)articleEntityBindingSource.Current);     ==> appel de la fonction frmEditArticle en passant l'élément courant

Le code dans ma frmEditArticle :
        public static void EditArticle(ArticleEntity article)
        {
            using (frmEditArticle formArticle = new frmEditArticle())
            {
                 formArticle.articleEntityBindingSource.DataSource = article;
                formArticle.StartPosition = FormStartPosition.CenterParent;
                formArticle.ShowDialog();
            }
        }

Je ne sais pas comment faire pour annuler mes modifs lorsque l'utilisateur clique sur le bouton annuler.
j'ai essayé articleEntityBindingSource.CancelEdit mais ça ne fonctionne pas et mes modifs sont toujours visibles sur mon DataGridView lorsque je quitte  la form frmEditArticle.

Merci à tous

4 réponses

thorgal1612 Messages postés 117 Date d'inscription dimanche 14 novembre 2004 Statut Membre Dernière intervention 19 janvier 2008
21 mars 2007 à 16:29
Bonjour,

J'ai finalement trouvé, je donne la solution pour ceux que ça interesse...
Toutes classes (binder) qui autorisent des modifiations de données et donc une validation ou une annulation doivent implémenter IEditableObject.
Mon bindingSource va invoquer BeginEdit sur l'objet éditable dès que cet objet devient l'objet courant. Dans ma classe, cela signifie que mon objet autorise la modification de ses données et que toutes ces modifications peuvent être annulées lors d'un appel de CanceEdit, si EndEdit n'a pas été appelé au préalable pour commiter les modifications.

Après chaque appel de CanceEdit ou EndEdit, le bindingSource invoque à nouveau BeginEdit

Concrètement cela signifie qua ma classe doit pouvoir stocker temporairement toutes les valeurs d'origines (celles d'avant l'appel de BeginEdit). Donc dans le corps des différentes méthodes BeginEdit, CanceEdit et EndEdit, j'écris mon propre code de stockage temporaire, et de restauration ou de validation définitive des données saisies

Et voilà...
3
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
19 mars 2007 à 10:30
Salut,

Déjà utilise ton code comme ceci :

        public static void EditArticle(ArticleEntity article)
        {
            using (frmEditArticle formArticle = new frmEditArticle())
            {
                 formArticle.articleEntityBindingSource.DataSource = article;
                formArticle.StartPosition = FormStartPosition.CenterParent;
                if (formArticle.ShowDialog() == DialogResult.Ok) {
                     // On valide l'enregistrement des données
               } else {
                     // On invalide le changement
               }
            }
        }

Sébastien FERRAND (blog)
Consultant Indépendant
[Microsoft Visual C# MVP]
0
thorgal1612 Messages postés 117 Date d'inscription dimanche 14 novembre 2004 Statut Membre Dernière intervention 19 janvier 2008
19 mars 2007 à 11:02
Salut,

Merci pour ta réponse. Je veux bien coder tu me le propose mais qu'est ce que je mets dans le bloc "On invalide le changement" ? Je mets "articleEntityBindingSource.CancelEdit" ? Si oui, j'ai essayé, pas à l'endroit où tu le dis mais dans un bouton qui permet de quitter ma form, et ça n'a pas marché.
0
thorgal1612 Messages postés 117 Date d'inscription dimanche 14 novembre 2004 Statut Membre Dernière intervention 19 janvier 2008
20 mars 2007 à 15:47
Salut Sebmafate,

J'ai modifié le code comme tu me l'a suggéré. J'ai placé articleEntityBindingSource.CancelEdit dans le bloc d'invalidation mais ça n'a rien changé.
Sais tu ce qu'il faut faire ???
0
Rejoignez-nous