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 :

Listes déroulantes et CheckedListBox


Sujet :

Windows Forms

  1. #1
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    149
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 149
    Points : 56
    Points
    56
    Par défaut Listes déroulantes et CheckedListBox
    Bonjour à tous,

    J'aurais besoin de votre aide pour un de mes projet vb
    Je m'explique :

    Déjà j'ai une base de données sous ACCESS :
    CATEGORIE (NoCategorie, LibCategorie)
    SOUS CATEGORIE (NoSousCategorie, LibSousCategorie, #NoCat)
    PRODUIT (NoProduit, LibProduit, #NoSousCat)

    Sur mon formulaire, j'ai deux listes déroulantes :
    - La première permet d'afficher toutes les catégories
    - La deuxième (qui se remplit avec l'évenement SelectedIndexChanged de la première liste déroulante) permet d'afficher les sous catégories correspondant à la catégorie séléctionnée

    J'ai également un CheckedListBox qui liste tous les produits de la sous catégorie séléctionnée dans le 2ème combobox (grâce aussi à un évenement SelectedIndexChanged) et c'est là qu'arrive mon problème

    Premier test : tout se passe bien, je sélectionne une categorie, puis une sous catégorie et les produits correspondants s'affichent comme il faut
    Deuxième test : je selectionne une autre catégorie, puis une sous catégorie correspondante, mais là, la liste de produit est toujours la même que le premier test.

    Voici mon code :

    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
    23
    Private Sub CboSousCategorie_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles CboSousCategorie.SelectedIndexChanged
     
    ' Ouverture de la connection (...)
     
    ChkListeProduit.Tag = New ArrayList
            ChkListeProduit.Items.Clear()
     
            num = CboSousCategorie.Tag(CboSousCategorie.SelectedIndex)
     
            cmd.CommandText = "select * from Produit where NoSousCat=" & num
            cmd.Connection = cnn
            drr = cmd.ExecuteReader()
            existenreg = drr.Read
     
            While existenreg
                ChkListeProduit.Items.Add(drr("LibProduit"))
                ChkListeProduit.Tag.add(drr("NoProduit"))
                existenreg = drr.Read
            End While
     
            drr.Close()
            cnn.Close()
    End Sub
    Donc il y a bien un problème avec l'index de la seconde liste déroulante mais je ne sais pas comment m'y prendre...
    Auriez vous une idée ??

    Merci d'avance ! Bonne journée !

  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 ferais mieux d'utiliser le data binding, ce serait plus propre que d'utiliser le Tag pour stocker une liste des identifiants...

    En gros l'idée est de charger toutes les données dans un DataSet, et de lier les combobox au DataSet via des BindingSource. Tout peut faire avec le designer. Pour filtrer automatiquement les sous-catégories selon la catégorie sélectionnée, il suffit de définir dans le DataSet la relation entre les tables catégorie et sous-caégorie, et de définir la relation comme source de données du 2e combobox. Idem pour les produits (sauf qu'en fait pour la CheckedListBox la propriété DataSource est "masquée", donc il faudra le faire par le code, mais c'est pas compliqué)

  3. #3
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2008
    Messages
    149
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2008
    Messages : 149
    Points : 56
    Points
    56
    Par défaut
    Oula... je ne connais pas du tout cette méthode !
    Aurais-tu une source à me donner pour que je puisse savoir comment on s'en sert ?


    Merci pour ta réponse en tout cas !

  4. #4
    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
    http://dotnet.developpez.com/cours/liaisoncontroles/

    C'est pas très récent (ça parle du DataGrid et non du DataGridView), mais les principes ont pas trop bougé...

    Je te fais la version express (je suppose que tu sais utiliser un DataSet, sinon regarde ce tuto) :

    tu dois avoir dans ton DataSet :
    - une table Categorie
    - une table SousCategorie
    - une table Produit

    avec des relations entre les tables :
    - Categorie_SousCategorie
    - SousCategorie_Produit

    sur ta form, tu poses 3 BindingSource :
    - bsCategorie : DataSource = ton dataset, DataMember = "Categorie"
    - bsCategorie_SousCategorie : DataSource = bsCategorie, DataMember = "Categorie_SousCategorie"
    - bsSousCategorie_Produit : DataSource = bsCategorie_SousCategorie, DataMember = "SousCategorie_Produit"

    Et tu définis les sources de données de tes contrôles, ainsi que les propriétés DisplayMember (nom de la colonne affichée) et ValueMember (nom de la colonne identifiant) :
    - comboBoxCategorie : DataSource = bsCategorie, DisplayMember = "LibCat", ValueMember = "NoCat"
    - comboBoxSousCategorie : DataSource = bsCategorie_SousCategorie, DisplayMember = "LibSousCat", ValueMember = "NoSousCat"
    - checkedListBoxProduit : DataSource = bsSousCategorie_Produit, DisplayMember = "LibProduit", ValueMember = "NoProduit"

    Après, c'est automatique : comme tu as défini la relation comme source de données, la liste des sous-catégories est automatiquement filtrée en fonction de la catégorie, et idem pour les produits en fonction de la sous-catégorie sélectionnée.

    Pour info, la propriété SelectedValue renvoie l'identifiant de l'élément sélectionné (d'où l'utilité de définir ValueMember)

    En plus d'être pratique (quasiment pas de code à écrire), cette méthode est beaucoup plus rapide car les données sont en mémoire, tu n'as pas besoin de faire une requête à chaque changement de sélection.

    La plus grosse partie de ce que j'ai indiqué plus haut peut être fait directement dans le designer, notamment la création des BindingSource. Sur les comboBox, il faut cliquer la petite flèche en haut à droite, cocher la première case à cocher et renseigner DataSource, DisplayMember et ValueMember. Par contre pour la CheckedListBox il faudra le faire dans le code (avec une simple ListBox ça marche comme pour les ComboBox)

Discussions similaires

  1. valeur d'une liste déroulante
    Par leeloo076 dans le forum ASP
    Réponses: 7
    Dernier message: 15/04/2004, 16h11
  2. liste déroulante
    Par leeloo076 dans le forum ASP
    Réponses: 12
    Dernier message: 23/03/2004, 10h35
  3. liste déroulante avec session
    Par leeloo076 dans le forum ASP
    Réponses: 3
    Dernier message: 19/03/2004, 11h01
  4. liste déroulante en ASP vbscript
    Par leeloo076 dans le forum ASP
    Réponses: 9
    Dernier message: 17/03/2004, 16h42
  5. Listes déroulantes liées entre elles
    Par denisC dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 27/07/2002, 15h53

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