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 :

Chercher un objet dans une liste d'objet


Sujet :

Windows Forms

  1. #1
    Membre habitué
    Inscrit en
    Septembre 2002
    Messages
    230
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 230
    Points : 148
    Points
    148
    Par défaut Chercher un objet dans une liste d'objet
    Bonjour,

    J'ai une liste d'objet (des clients).

    La classe Client a deux proprités :
    - idClient
    - nomClient

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    List<Client> clients = new List<Client>();
    ...
    // initialisation des infos des clients
    Fill(clients);
    Cette liste est affichée dans une grille

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    gridControl.datasource = clients
    Ma question est la suivante :
    je cherche à modifier le nom du client qui a le idClient = 100 (par exemple) dans la liste clients.

    Comment faire ?

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Tu peux utiliser la méthode Find, qui prend en paramètre un prédicat, et renvoie le premier élément de la liste qui satisfait le prédicat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Client x = client.Find(delegate(Client c) { return (c.idClient == 100); });
    x.nomClient = "Dupond";
    La syntaxe en C# 2 est un peu lourde... en C# 3 c'est un peu mieux, grâce aux expressions lambda :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Client x = client.Find(c => c.idClient == 100);
    x.nomClient = "Dupond";

  3. #3
    Membre habitué
    Inscrit en
    Septembre 2002
    Messages
    230
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 230
    Points : 148
    Points
    148
    Par défaut
    la solution que tu me proposes permet de modifier le nom du client de l'objet client. mais au niveau de la liste des clients (clients) cette modification ne sera pas pris en compte.


    Je cherche à faire la modification au niveau de la liste des clients ce qui me permttra de mettre facilement le gridcontrol à jour en réaffectant gridcontrol.datasource = clients

    merci

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Salut,

    Ce sont de objets que tu manipules (donc par reference) donc x est bien l'un des objets de ta liste. Par conséquent, la modif apportée à x doit être visible dans ta liste aussi.

    Si ça ne marche pas, c'est que le pb est ailleurs...

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par Axiome Voir le message
    la solution que tu me proposes permet de modifier le nom du client de l'objet client. mais au niveau de la liste des clients (clients) cette modification ne sera pas pris en compte.
    Si Client est une classe et non une structure, le client sera bien modifié dans la liste... je suppose que ce que tu veux dire, c'est qu'il n'est pas modifié dans l'interface graphique ? Il faut donc rafrachir l'affichage...

    Citation Envoyé par Axiome Voir le message
    Je cherche à faire la modification au niveau de la liste des clients ce qui me permttra de mettre facilement le gridcontrol à jour en réaffectant gridcontrol.datasource = clients
    Qu'appelles-tu GridControl ? ce n'est pas un composant du framework... peut-être le contrôle de DevExpress ?
    En tous cas, avec un DataGridView, remettre clients en DataSource n'a pas d'effet si c'est toujours la même liste. Une astuce est de mettre DataSource à null juste avant de remettre clients. Ou alors, le GridControl est "intelligent" et sait utiliser INotifyPropertyChanged : dans ce cas il suffit que Client implémente cette interface pour prévenir quand une propriété a changé.

    EDIT: en passant par une BindingSource, le datagridview prend en compte les modifs (si Client implémente INotifyPropertyChanged bien sûr)

  6. #6
    Membre habitué
    Inscrit en
    Septembre 2002
    Messages
    230
    Détails du profil
    Informations forums :
    Inscription : Septembre 2002
    Messages : 230
    Points : 148
    Points
    148
    Par défaut
    Merci ça fonctionne.

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

Discussions similaires

  1. Chercher un objet dans une list<> d'objets
    Par Folker dans le forum C#
    Réponses: 9
    Dernier message: 26/02/2015, 01h40
  2. Passer une liste d'objets dans une méthode ajax
    Par AsPrO dans le forum ASP.NET Ajax
    Réponses: 4
    Dernier message: 01/03/2012, 11h28
  3. Réponses: 6
    Dernier message: 22/02/2010, 14h05
  4. trier une liste d'objets dans une ArrayList
    Par sandrine49 dans le forum Collection et Stream
    Réponses: 9
    Dernier message: 13/10/2008, 08h59
  5. Réponses: 2
    Dernier message: 29/05/2008, 15h59

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