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

C# Discussion :

Recherche et Insertion de valeurs dans une List<T>.


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 43
    Par défaut Recherche et Insertion de valeurs dans une List<T>.
    Bonjour tout le monde,

    En m'adonnant a la manipulation de listes j'ai eu quelques soucis en essayant de trouver une méthode pour changer des valeurs précises dans celles-ci.

    Je m'explique: Je reçois un type personnalise de tableau, appeler ArrayOfString, de la part d'un Web Service. Jusqu'à la rien de très compliquer. J'ai une classe(Friends) auquel je rajoute sous forme de list<T> les valeurs extraites de mon Tableau(comme le nom, leur id, leur message et leur statut=> en-ligne ou hors-ligne). Je bind cette liste nouvellement créée a une Listbox et j'affiche correctement tous mes éléments dans celle-ci. Par la suite, afin de mettre a jour ma liste d'amis, je vais recevoir un autre tableau( plus petit cette fois) ou sera inscrit l'ID de mes amis et leur nouveau statut. Ce que je souhaite faire c'est dans ma liste déjà créée mettre a jour les informations que je veux:

    - Rechercher la ligne correspondante a l'ID de mes amis(qui est unique).
    - Et changer en conséquence la valeur de statut se trouvant sur la même ligne.

    Voici le code de ma 'class' que j'utilise pour la liste:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public class Friends
    {
            public string Friend_ID { get; set; }
            public string Name { get; set; }
            public string Message { get; set; }
            public string FriendAvatar { get; set; }
            public int Status { get; set; }
            public string Status_Image { get; set; }
    }
    Voici la création de ma liste en tout premier lieu:

    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
    19
    20
    21
    22
     
    public List<Friends> GetFriend(Test.ArrayOfString friend_info_tab)
        {
            List<Friends> friend = new List<Friends>();
            int i = 1;
            int array_length;
     
            array_length = friend_info_tab.Count;
            ErrorMSG.Text = "Friend array length " + Convert.ToString(array_length);
            if (array_length == 1)
                ErrorMSG.Text = "No friends reported";
            else if (array_length > 1)
            {
                while (i < array_length)
                {
                    friend.Add(new Friends() { Friend_guid = friend_info_tab[i], Name = friend_info_tab[i + 1], Message = friend_info_tab[i + 2],
                                                FriendAvatar = Get_avatar(friend_info_tab[i]), Status = 0, Status_Image = "/AfinosWeb;component/Image/contact/offline.png" });
                    i = i + 3;
                }
            }
            return friend;
        }
    Grâce a LINQ j'ai su extraire des informations et trouver ce que je cherchais mais impossible de trouver une méthode pour y insérer la valeur que je veux modifier. J'avais penser convertir ma liste en tableau, changer la valeur souhaiter et ensuite la reconvertir en liste mais je trouve cette option peu optimisée et peu esthétique.

    J'espère avoir été assez clair et que ma question ne sera pas trop stupide car bien qu'ayant lu une documentation entière parlant de LINQ je n'ai toujours pas trouver réponses a mes questions.

    Cordialement, Ephismen.

  2. #2
    Membre Expert
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Par défaut
    bonjour ,

    pourquoi ne pas faire une remove en suite une Add?

    1 erement recupere ton object recherche.
    2 ement remove ton object de ta list.
    3 ement add a nouveau votre object.

    ou tu peut utliser un Dictionnary

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Dictionary<int, Friends> FriendsDIc=new Dictionary<int,Friends> ();
    ajouter un object (frd) de type friends

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    FriendsDIc.Add(frd.Friend_ID,frd);
    cherche l'object frd2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    if (FriendsDIc.ContainsKey(frd2.Friend_ID))
    {
    //trouve
    }
    else
    {//l'object frd2 n'existe pas dans FriendsDIc
     
    }
    et l modification est simple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    FriendsDIc[frd2 .Friend_ID]=frd2new;
    et pour parcourir le Dictionnary une simple foreach fera la faire ..

    bon codage

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 43
    Par défaut
    J'avais déjà penser a copier l'élément de la liste que je souhaitais pour ensuite le supprimer, le modifier, et l'insérer de nouveau dans celle-ci.
    Le problème c'est que lorsque je reçois mon tableau a partir de la seconde fois il ne contient que le Friend_ID et le Friend_Statut. Donc appliquer la première méthode que tu as citée m'effacerait le nom, le message et les autres informations de cet utilisateur la, qu'il me serait impossible de récupérer. Ce que je souhaite faire c'est réellement me positionner sur la ligne que je désire(avec l'ID comme identifiant unique de la ligne), et modifier certains éléments de cette même ligne. Je tiens a faire cela car le Friend_Statut peut être le même pour plusieurs utilisateurs mais l'ID lui est unique(donc il me sert de référence).

    Pour ce qui est du dictionnaire je trouve cela un poil complique pour ce que je faire, surtout si je veux le bind a une ListBox.

  4. #4
    Membre Expert
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Par défaut
    bonjour,

    je pense que une liste va rendre ça un peut plus complique !!!

    et pour le binding de ton dictionnary il y'a une methode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     BindingSource datasource = new BindingSource(_FriendsDIc.Values , null);
               dataGridView1.DataSource = datasource;

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 43
    Par défaut
    J'ai regarder l'utilisation du dictionnaire en C# et notamment avec le ToDictionnary(), mais je dois avouer que je trouve cela relativement complexe pour ce que j'ai a faire. N'est-il pas possible de changer des valeurs a l'intérieur même d'une liste?

  6. #6
    Membre Expert
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Par défaut
    Bonjour,

    tu peut creer une fonction qui cherche ton object ( avec les condition que tu propose = Condition de recherche )et retourne l'index de ce element dans ta liste en utilisant les fonctions de base d'une liste (FindIndex par exemple )

    et si t'arrive a trouve l'index ou se trouve ton element bah c gagne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    listFreinds[index]=frdsnew;

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

Discussions similaires

  1. [XL-2007] Recherche si valeur dans une liste
    Par Ghuron dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 08/12/2014, 16h03
  2. Réponses: 22
    Dernier message: 13/09/2013, 14h20
  3. [XL-2003] Insertion d'une valeur dans une liste déroulante
    Par rafalemirage dans le forum Excel
    Réponses: 2
    Dernier message: 04/05/2009, 08h17
  4. Réponses: 2
    Dernier message: 22/04/2008, 16h21
  5. recherche de valeur dans une liste lag lead
    Par fatsora dans le forum Oracle
    Réponses: 1
    Dernier message: 31/01/2008, 08h28

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