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 :

Chercher un objet dans une list<> d'objets


Sujet :

C#

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 4
    Points : 1
    Points
    1
    Par défaut Chercher un objet dans une list<> d'objets
    Bonsoir à tous,

    je me fais un petit projet C# pour m’entraîner, mais j'ai un petit souci.

    Je vais essayer d'être le plus clair possible.

    J'ai une classe "Jouet", avec comme Attribut: nom, enStock (oui/non), et un objet typeJouet
    Une autre classe "typeJouet", avec comme attribut: nomType;

    Puis, j'ai fait un formulaire pour rentrer un nouveau jouet dans une DataGridView.
    L'utilisateur rentre le nom du jouet, son type parmi un choix de type récupérer dans une list<> de typeJouet et rentrer dans une comboBox et sélectionne s'il est en stock avec des radioBoutons oui/non.

    Et voici mon code pour ajouter un nouvel objet:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    string nom = txtNom.Text;
                string type = cboType.Text;
                string Enstock;
     
                if (rbOui.Checked)
                {
                    Enstock = "oui";
                }
                else
                {
                    Enstock = "non";
                }
     
                jouet unJouet = new jouet(nom, type, Enstock);
    Le problème est que mon "type" dans mon nouvel objet unJouet n'est pas de type typeJouet, mais de type string et n'est donc pas accepter par mon constructeur de jouet.

    J'aimerais savoir comment faire pour palier ce problème ?
    J'avais penser rajouter une ligne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typeJouer unTypeJouet = new typeJouet(type);
    puis mettre dans on nouvel objet unJouet:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    jouet unJouet = new jouet(nom, unTypeJouet, Enstock);
    Mais ça me semble idiot de créer un nouveau typeJouet alors que celui-ci existe déjà.

    N'hésitez pas si vous avez des questions.

    Merci d'avance

  2. #2
    Membre chevronné
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Points : 2 209
    Points
    2 209
    Par défaut
    Tu remplis ta ComboBox avec des objets "typeJouet" plutôt qu'avec des string ; tu positionnes sa propriété DisplayMember sur le nom de la propriété que tu veux afficher (ici nomType) et tu utilises SelectedItem pour récupérer l'objet (donc le typeJouet) sélectionné (il te faudra le convertir en typeJouet, SelectedItem renvoyant un object)
    voir exemple dans la documentation de ListControl.DisplayMember (l'exemple utilise une ListBox mais c'est pareil vu que ComboBox et ListBox héritent tout deux de ListControl)

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Bonsoir et merci de la réponse rapide,

    en fait, je rempli déjà ma combobox avec ma liste d'objets typeJouet

    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
     private void RemplitComboType()
            {
                // efface le contenu de la collection de la combo
                this.cboType.Items.Clear();
     
                // parcours la collection des types de jouet
                foreach (typeJouet t in lesTypes)
                {
                    // ajoute le type à la collection de la combo
                    this.cboType.Items.Add(t);
                }
     
                // définit la propriété à afficher dans la combo
                this.cboType.DisplayMember = "LibelleType";
            }

  4. #4
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2013
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 93
    Points : 127
    Points
    127
    Par défaut
    Soit tu fais une liaison de donnee avec tes composants databinding et donc tu récuperes des objets. Un mvc ou mvvm.
    Et après tu peux utiliser la fonction Find ou FindAll.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    List<Jouet> jouets = <remplisage>
    Jouet jouet = jouets.Find(delegate(Jouet jou){ return jou.Nom == "canard";}));
    If(jouet == null) // pa de jouet qui a pour nom canard dans la liste
    Else // jouet du nom de canard présent

  5. #5
    Membre chevronné
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Points : 2 209
    Points
    2 209
    Par défaut
    Citation Envoyé par Folker Voir le message
    Bonsoir et merci de la réponse rapide,

    en fait, je rempli déjà ma combobox avec ma liste d'objets typeJouet
    bah il ne te reste plus qu'à récupérer l'objet sélectionné (via SelectedItem sans oublier le cast) plutôt que le texte du contrôle et le tour est joué (ou j'ai loupé un truc )

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Merci beaucoup pour le SelectedItem

    Mais je n'ai pas trop compris l'histoire du cast, car maintenant j'ai:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     typeJouet type = cboType.SelectedItem;
    Et il me dit: "Impossible de convertir implicitement le type "object" en "typeJouet". Une conversion explicite existe (un cast est-il manquant?)

    Et mes recherches sur google n'ont rien donné de très probant

  7. #7
    Membre chevronné
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Points : 2 209
    Points
    2 209
    Par défaut
    Juste en tapant le message d'erreur (après avoir supprimé typeJouet qui est spécifique à ton code) je tombe sur ceci ou cela

  8. #8
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2013
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 93
    Points : 127
    Points
    127
    Par défaut
    Citation Envoyé par Folker Voir le message
    Merci beaucoup pour le SelectedItem

    Mais je n'ai pas trop compris l'histoire du cast, car maintenant j'ai:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     typeJouet type = cboType.SelectedItem;
    Et il me dit: "Impossible de convertir implicitement le type "object" en "typeJouet". Une conversion explicite existe (un cast est-il manquant?)

    Et mes recherches sur google n'ont rien donné de très probant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    type = (typeJouet)cbo.Type.SelectedItem;
    Le cast c'est le "(typeJouet)".

  9. #9
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Ah oui merci !

    j'ai donc essayé ça:

    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
    private void ajouterUnJouet()
            {
                string nom = txtNom.Text;
                typeJouet type = (typeJouet)cboType.SelectedItem;
                string Enstock;
     
                if (rbOui.Checked)
                {
                    Enstock = "oui";
                }
                else
                {
                    Enstock = "non";
                }
     
     
                jouet unJouet = new jouet(nom, type, Enstock);
                lesJouets.Add(unJouet);
     
                unJouet.Afficher();
     
            }
    Mais visiblement le type n'est pas enregistré

  10. #10
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2013
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 93
    Points : 127
    Points
    127
    Par défaut
    Par le respect de la nomenclature le nom des classes commencent par une majuscule. (ça me perturbe ><)
    Dans ton objet tu devrais mettre un boolean directement plutôt que oui/non en string, après ça tu peux le régler à l'affichage.

    Théoriquement le code est bon. Après tu as peut-être zaapé un détail ailleurs et que tu nous a pas montré.
    Le displayMember tu devrais le mettre dans la construction même du composant.

Discussions similaires

  1. Chercher un objet dans une liste d'objet
    Par Axiome dans le forum Windows Forms
    Réponses: 5
    Dernier message: 10/10/2008, 09h43
  2. Réponses: 1
    Dernier message: 08/09/2006, 17h21
  3. récupérer un objet dans une liste chainée
    Par marsuwhite dans le forum Langage
    Réponses: 4
    Dernier message: 05/06/2006, 14h05
  4. insertion d'objets dans une liste chainee
    Par mathher dans le forum C++
    Réponses: 8
    Dernier message: 20/04/2006, 16h28
  5. [Swing][JList] Placer un Objet dans une liste
    Par Invité dans le forum Composants
    Réponses: 1
    Dernier message: 17/02/2006, 10h31

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