IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

Obtenir l'ancienne valeur d'un champs lors d'un BindingSource_ListChanged


Sujet :

Windows Forms

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2009
    Messages : 18
    Points : 18
    Points
    18
    Par défaut Obtenir l'ancienne valeur d'un champs lors d'un BindingSource_ListChanged
    J'ai créé une forme générique sur laquelle j'utilise un BindingSource pour lier mes classes implémentant IEditableObject à un DataGridView.

    J'utilise l'évènement ListChanged du BindingSource pour savoir quel champs de ma classe est modifié ainsi que sa nouvelle valeur.
    Mais, je n'arrive pas à trouver son ancienne valeur pour pouvoir la comparer à sa nouvelle ou tout simplement effacer des infos concernant l'ancienne valeur dans la DB.

    Auriez-vous une idée?

    Merci

  2. #2
    Membre confirmé Avatar de MetalGeek
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 412
    Points : 513
    Points
    513
    Par défaut
    Et bien, dans ta classe implémentant IEditableObject, tu n'as pas des champs private qui contiennent tes valeurs ?
    Ensuite dans l'accesseur Set de tes propriétés tu les compares, du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
     
    private string _name;
     
    public string Name
    {
        get { return this._name; }
     
        set 
        {
            if (!string.Equals(this._name, value, StringComparison.Ordinal))
            {
                //ici tu fais ce que tu veux de 'this._name', qui est l'ancienne valeur
                //
                this._name = value;
            }
        }
    }

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2009
    Messages : 18
    Points : 18
    Points
    18
    Par défaut
    Merci. Oui bien sur j'y ai pensé. Mais je cherche une solution plus général que d'aller ajouter du code spécifique dans mes classes Model. Pour que je puisse créer une sorte de Méthode OnItemChanged(object OldValue, object NewValue, string PropertyName).

    Je rêve peut-être

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 23
    Points : 26
    Points
    26
    Par défaut
    Si tu utilises un DataTable comme source de données, la méthode la plus fiable est d'utiliser des DataView pour les rangées modifiées :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    DataView dvModified = new Dataview(monDataTable);
    dvModified.RowStateFilter = DataViewRowState.ModifiedCurrent;
     
    DataView dvOriginal = new DataView(monDataTable);
    dvOriginal.RowStateFilter = DataViewRowState.ModifiedOriginal;
    De cette facon, tu as deux DataView, un contenant les rangées d'origine pour les rangées modifiées, l'autre contenant les rangées modifiées pour ces mêmes rangées modifiées. Il ne reste plus qu'à comparer cellule par cellule lesquelles sont effectivement concernées par les modifications.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2007] Fixer la valeur d'un champ lors de l'utilisation d'un formulaire
    Par tomatotep dans le forum IHM
    Réponses: 6
    Dernier message: 03/07/2012, 17h47
  2. Réponses: 2
    Dernier message: 29/08/2011, 12h22
  3. Réponses: 10
    Dernier message: 18/04/2011, 15h53
  4. Réponses: 10
    Dernier message: 10/08/2006, 15h44
  5. Réponses: 2
    Dernier message: 07/06/2006, 08h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo