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 :

[C#]Parcourir items d'un combobox pour en remplir un autre avec


Sujet :

Windows Forms

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 49
    Par défaut [C#][Résolu]Parcourir items d'un combobox pour en remplir un autre avec

    salut,

    je voudrais savoir quelles sont les techniques pour récupérer les items d'un combobox afin de les mettre dans un autre combobox (d'une autre classe).
    en gros c'est de l'héritage je pense
    pour l'instant j'ai déclaré mon combo que je veux remplir en public, et dans la form où se trouve le combo rempli j'y accède, mais impossible de trouver la syntaxe pour parcourit les items du premiers combo pour remplir le second avec.
    si vous aviez des pistes , ça illuminerait ce triste vendredi.

    Merci ;-)

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    344
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 344
    Par défaut
    Deux solutions .....

    Soit, tu fais juste une copie et dans ce cas tu peux faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ComboDest.Items.AddRange(ComboSource.Items)
    Soit, tu fais un vrai parcours (cela peut te permettre de filtre certaines valeurs)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim element As Object
    For Each element In ComboSource.Items
        ComboDest.Items.Add(element)
    Next
    Attention mon code est du VB.NET mais le code en C# doit être quasiment identique (sauf pour la déclaration de la variable element).

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 49
    Par défaut c'est pas encore ça....
    merci pour les exemples, mais en C# ça n'a pas l'air de marcher ou alors
    c'est que je n'ai pas la bonne syntaxe (j'en ai beaucoup essayées pourtant !), mais je ne suis pas encore très expérimentée....

    mais c'est gentil d'avoir répondu ...

    quelqu'un l'a déjà implémenté en C# ?

    merci

    tikam

  4. #4
    Membre Expert Avatar de Mose
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 143
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    maComboBoxDestination.Items.AddRange(maComboBoxSource.Items)
    Et non, ça n'a strictement rien à voir avec l'héritage. Je ne saurais trop te suggèrer de te re-renseigner sur cette notion assez fondamentale.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 49
    Par défaut Même syntaxe mais erreur à la compil
    oui en effet, cela n'a rien à voir avec l'héritage
    je me suis renseignée dessus depuis ....(excusez je suis complètement autodidacte)

    ta syntaxe est exactement celle que j'utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    //création de l'objet form qui contient le combo de destination
    Multicriteres dip = new Multicriteres("Diplome");
    dip.cmb_valeur1.Items.AddRange(cmb_diplome.Items);
    dip.ShowDialog();
    mais elle produit une erreur récurrente à la compilation:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    erreur 1 La méthode surchargée correspondant le mieux à 'System.Windows.Forms.ComboBox.ObjectCollection.AddRange(object[])' possède des arguments non valides
    Erreur	2 Argument '1'*: impossible de convertir de 'System.Windows.Forms.ComboBox.ObjectCollection' en 'object[]'
    qu'est ce que j'ai fait de travers ?

    merci de me donner ton avis Mose si tu as qq minutes ;-)

  6. #6
    Membre Expert Avatar de Mose
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 143
    Par défaut
    Ah non t'as raison, c'est super mal foutu. Encore une incohérence idiote du framework... (soupir blasé).

    Qq solutions rapides :

    1 - passer par un tableau d'object
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    object []objz = new object[cbSource.Items.Count];
    cbSource.Items.CopyTo(objz, 0);
    cbDest.Items.AddRange(objz);
    2 - copier item par item
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    foreach (object item in cbSource.Items)
         cbDest.Items.Add(item);
    3 - copier item par item en évitant le scintillement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    // on bloque les évènements de la combobox
    cbDest.SuspendLayout();
     foreach (object item in cbSource.Items)
         cbDest.Items.Add(item);
    // on redémarre les évènements
    cbDest.ResumeLayout(false);

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 49
    Par défaut Merci, ça marche nickel !
    Merci Mose

    je n'ai essayé pour l'instant que la première solution et ça marche du tonnerre
    je garde tes 3 solutions bien au chaud, d'ailleurs ça mériterait d'être intégré à la faq mais je ne connais pas les modérateurs

    encore merci

  8. #8
    Membre Expert Avatar de Mose
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 143
    Par défaut
    Merci du compliment, mais je ne le pense pas car une question me tracasse :
    Quelle est l'utilité de copier mes valeurs d'une ComboBox à une autre ?
    A quoi ça te sert ?

    Je présume, peut-être à tort, un problème de conception dans ton interface... mais je me mèle de ce qui ne me regarde pas

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 49
    Par défaut l'explication de ma demande
    j'ai une fenêtre principale avec un datagrid et une partie recherche où je laisse la possibilité de filtrer ce datagrid via plusieurs critères dans des combo box (selection d'une valeur dans la liste du combo du critère choisi)

    ensuite pour chacun des critère je mets un hyperlien qui donne le choix à l'utilisateur de perfectionner sa recherche en sélectionnant des opérateurs et des valeurs pour ce même critère, c'est exactement comme quand tu as un filtre sur une colonne excel et que tu choisies "personnalisé"
    un popup s'ouvre et j'ai non plus 1 combox simple par critère mais la possibilité
    de choisir des opérateurs et des valeurs

    exemple

    critère sur page du datagrid = combo avec la liste simple des diplome

    critère sur pop up de personnalisation = diplome = ou != à valeur1
    et/ou diplome = ou != à valeur2

    c'est pour ça que j'ai besoin de récupérer mon premier combo (pour éviter de refaire les requêtes BDD pour le remplir.


    je sais pas si c'est très bon côté interface mais on m'a ordonné de faire comme ça ..... par contre pour mon enrichissemnent personnel je veux bien avoir ton avis sur la question

  10. #10
    Membre Expert Avatar de Mose
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 143
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 143
    Par défaut
    Ah ok.
    Oui, ça peut se justifier effectivement dans un tel contexte. Ca évite effectivement les requêtes inutiles.

    En revanche, j'aurais sans doute eu tendance à séparer la couche donnée de la couche interface :
    * j'aurais stocké les valeur retournées par la query dans un tableau de valeurs.
    * j'aurais ajouté ces valeurs à la première combobox.
    * en cas de besoin, au lieu d'aller récupérer les données dans un élément de l'interface (la première combobox), j'aurais réutilisé le contenu du tableau de valeurs.

    C'est un chouïa plus lourd en mémoire, mais ça permet de bien faire la séparation entre données et interface. Ca améliore légèrement la flexibilité. Question de philosophie

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 49
    Par défaut pas faux
    je comprends bien ton point de vue, mais le fait est que j'ai débuté le C#
    en juin et qu'il y a notamment des points que je ne maîtrise pas encore très bien comme la création et la manipulation des tableaux .
    stocker les valeurs de chaque combo dans un tableau me parait un peu lourd
    mais c'est vrai qu'au moins interface et données sont bien séparées, Je retiens la philosophie et j'essaierai de l'appliquer.....
    merci pour cet échange interessant ;-)

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

Discussions similaires

  1. [Débutant] Lire les Items d’un comboBox pour en obtenir un String
    Par Claude_Azoulai dans le forum C#
    Réponses: 3
    Dernier message: 30/03/2013, 19h43
  2. [A-03] Se servir d'une table pour en remplir une autre
    Par keeepcoool dans le forum Modélisation
    Réponses: 9
    Dernier message: 26/12/2008, 13h44
  3. [VBA-E] Parcourir les Items d'un ComboBox à la recherche d'une string
    Par Jipété dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 01/12/2006, 20h23
  4. Incrémenter l'item d'un ComboBox
    Par Navi dans le forum Composants VCL
    Réponses: 24
    Dernier message: 26/12/2005, 23h16
  5. [VB.Net][DataGrid] Comment retirer des items d'un ComboBox ?
    Par graphicsxp dans le forum Windows Forms
    Réponses: 9
    Dernier message: 20/12/2005, 12h46

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