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

VB.NET Discussion :

Manipuler DropDownList de comboboxs


Sujet :

VB.NET

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 140
    Points : 37
    Points
    37
    Par défaut Manipuler DropDownList de comboboxs
    Bonjour

    Je suis confronté à un problème dont je ne comprends pas le pourquoi (et donc je ne trouve pas de solution).

    Pour simplifier, j'ai 2 comboboxs Cbx1 et Cbx2, dont leurs Datasources sont bindées à une Dataview filtrée.
    J'ai également une procédure qui "reset" les dataviews de ces 2 cbx, ce qui fait qu'elles se retrouvent bindées à une nouvelle DataView filtrée differemment.
    A la fin de cette même procédure, il y a du code qui remet la valeur Text de ces 2 Cbx à celles qu'elles avaient avant le reset, si et seulement si ces anciennes valeurs appartiennent à la nouvelle dataview. (obligé de faire ca car sinon le fait d'affecter une nouvelle dataview à un Datasource provoque le Text = 1ère valeur de la nouvelle dataview...relou mais bon...)

    Jusque là pas de problème... sauf dans le cas où ces 2 Cbx sont en fait mutuellement exclusives. Cela signifie que la valeur Text de la 1ère Cbx ne doit pas apparaitre dans la liste déroulante de la 2nde Cbx, et vice versa.

    Donc dans l'événement qui appelle la procédure "Reset", j'ai rajouté ces lignes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
                UpdateEquipList() ' procédure reset
                If Cbx1.FindStringExact(Cbx2.Text) > -1 Then
                    Cbx1.Items.Remove(Cbx2.Text)
                End If
                If Cbx2.FindStringExact(Cbx1.Text) > -1 Then
                    Cbx2.Items.Remove(Cbx1.Text)
                End If
    Pas d'erreur de syntaxe, mais à l'éxécution , ca fait......... rien du tout
    On retrouve Cbx1.text dans la liste déroulante de Cbx2 et vice versa...

    Après quelques heures de recherche, je crois que les collections Cbx1.Items et Cbx2.Items sont en fait vides, vu que j'ai "rempli" ces comboboxs via leur datasource. (bizarrement quand je teste Cbx1.Items.Count, ca me retourne 79... et après le .Remove, .count=79 pareil)
    J'ai donc essayé en remplaçant les lignes en gras par : et là je m'aperçois que VB ne me propose pas de méthode Remove ou Delete, ni même Item...
    ...et comme je n'ai plus accès aux dataviews, je ne peut pas m'en servir.
    Je ne peut pas non plus mettre ces lignes directement dans la procédure UpdateEquipList() puisque je dois attendre que Cbx1 et Cbx2 aient été resetées, avant de pouvoir de comparer leurs valeurs Text.
    Du coup, me voilà bien coincé...

    Quelqu'un aurait-il une idée svp ?

  2. #2
    Membre émérite Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Points : 2 528
    Points
    2 528
    Par défaut
    Si les combobox sont bindé sur les dataview....

    C'est pas au niveau des combobox qu'il faut supprimer des éléments, mais directement a la source, c'est a dire les dataview.
    L'avenir appartient à ceux... dont les ouvriers se lèvent tôt. (Coluche)

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 140
    Points : 37
    Points
    37
    Par défaut
    Justement je n'ai plus ces dataviews...

    En fait, la procédure UpdateEquipList est une boucle qui construit une seule unique dataview avec une datatable dont le nom est le même que la combobox, puis elle affecte cette dataview a la datasource de la combobox, puis passe a la combobox suivante, etc... jusqu'a avoir fini de reset 60 comboboxs.
    Le hic c'est que dans le tas, quelques paires de cbx sont mutuellement exclusives... c'est pour ca que je veux rajouter ces Remove pour réparer les pots cassés :s

    Si quelqu'un sait où se trouvent les collections contenant les items des dropdownlist, sous forme d'un objet possédant une méthode remove ou Delete ou similaire, le problème sera résolu.

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 140
    Points : 37
    Points
    37
    Par défaut
    Bonjour

    J'ai fait quelque tests afin d'essayer de trouver où se trouvent mes items de cbx :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Msgbox(Me.Cbx1.Items()(2).ToString)
    Resultat affiché: "System.Data.DataRowView"

    en lisant ça jme dit "tiens tiens les items sont encore au format DataView (alors que la dataview qui a servi à affecter le datasource n'existe plus depuis belle lurette)". J'essaie quand même un cast :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Msgbox(CType(Me.Cbx1.Items()(2), DataRowView).Row.Item("Names").ToString)
    Resultat affiché: "Axe Grip" (c'est bien l'affichage du 3e item de la dropdownList)
    Encore mieux, je découvre qu'après un Cast, l'objet obtenu a la méthode Delete ! Je me dit "Super voilà ce qui me fallait", et me voilà à taper dans mon code ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
                If Me.Cbx1.FindStringExact(Me.Cbx2.Text) > -1 Then
                    CType(Me.Cbx1.Items()(Me.Cbx1.FindStringExact(Me.Cbx2.Text)), DataRowView).Delete()
                End If
                If Me.Cbx2.FindStringExact(Me.Cbx1.Text) > -1 Then
                    CType(Me.Cbx2.Items()(Me.Cbx2.FindStringExact(Me.Cbx1.Text)), DataRowView).Delete()
                End If
    ... et là surprise !!
    Non seulement il me delete Cbx1.Text et Cbx2.Text, mais il le fait ..... sur ma BDD carrément ces 2 valeurs disparaissent littéralement de la nature, totalement "pulvérisées" (heureusement g une backup de mon fichier BDD)

    Donc bon je suis pas encore au bout de mes peines...

    Si quelqu'un a une idée de la bonne syntaxe en moins , "I'm interested please".

Discussions similaires

  1. Exemple simple de manipulation d'un ComboBox
    Par DelphiCool dans le forum Codes sources à télécharger
    Réponses: 0
    Dernier message: 08/02/2013, 21h03
  2. [Débutant] Manipulation d'une ComboBox
    Par fahdmustapha dans le forum C++Builder
    Réponses: 2
    Dernier message: 22/06/2011, 13h38
  3. Dropdownlist comme combobox est ce possible?
    Par dachir dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 15/01/2008, 09h46
  4. Réponses: 2
    Dernier message: 15/10/2005, 18h47
  5. [C#] [WinForms] ComboBox DropDownList
    Par RobinJulie dans le forum Windows Forms
    Réponses: 7
    Dernier message: 13/10/2004, 11h02

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