Remplir une ListView en fonction d'une comboBox [Résolu]

cs_Webjojo 9 Messages postés samedi 20 novembre 2004Date d'inscription 17 août 2007 Dernière intervention - 17 août 2007 à 00:48 - Dernière réponse : cs_Webjojo 9 Messages postés samedi 20 novembre 2004Date d'inscription 17 août 2007 Dernière intervention
- 17 août 2007 à 15:12
Bonjour,
J'ai une listView et une comboBox et j'aimerais que ma ListView se remplisse en fonction du choix que j'ai fais dans ma comboBox.

Actuellement ma listView se rempli uniquement avec ma premiere sélection de ma comboBox.

Voici mon code (RemplirComboBox et RemplissageProduit sont lancé dans le Form_Load) :

Private Sub RemplirComboBox()




    Dim rst As New ADODB.Recordset
       
    'Vidage de la liste au démarrage sinon tout va s'ajouter
    Me.cboCategorie.Clear
      
    'Récupération dans la base de données
    rst.Open "SELECT num_categorie, nom_categorie FROM categorie", mCnx, adOpenForwardOnly
     
    'On parcours toute la base de données et on ajoute chaque nom de catégorie dans la combo box
    Do Until rst.EOF
        Me.cboCategorie.AddItem rst.Fields("nom_categorie").Value
        rst.MoveNext
    Loop
   
End Sub





Private Sub RemplissageProduit()



Dim rstProduit As New ADODB.Recordset
Dim rstCategorie As New ADODB.Recordset
Dim RequeteCategorie As String
Dim RequeteProduit As String
Dim intCompteur As Integer




    'Vidage de la liste au démarrage sinon tout va s'ajouter
    Me.lstProduit.ListItems.Clear
   
    'Récupération du numéro de catégorie dans la base de données
    RequeteCategorie = "SELECT num_categorie FROM categorie WHERE nom_categorie=" & "'" & cboCategorie.Text & "'"
   
    rstCategorie.Open RequeteCategorie, mCnx, adOpenForwardOnly
   
    'Récupération des champs des produits dans la base de données
    RequeteProduit = "SELECT * FROM produit WHERE ref_categorie LIKE " & "'" & rstCategorie("num_categorie") & "'"
   
    rstProduit.Open RequeteProduit, mCnx, adOpenForwardOnly
      
    'On définit les propriétés de la ListView lstProduit
    With lstProduit
        'On définit le nombre de colonnes et le nom des entêtes
        With .ColumnHeaders
            .Clear
            .Add , , "N° du produit", 1000
            .Add , , "Nom du produit", 2000
            .Add , , "Quantité", 1500
            .Add , , "Prix", 1500
        End With
    End With
   
    intCompteur = 1
   
    'On parcours toute la base de données et on ajoute chaque nom de catégorie dans la liste box
    Do Until rstProduit.EOF
       
        With lstProduit
            'On ajoute une ligne et on la renseigne
            With .ListItems
                .Add , , rstProduit("num_produit")
            End With
           
            'On renseigne la deuxième colonne
            .ListItems(intCompteur).ListSubItems.Add , , rstProduit("nom_produit")
            .ListItems(intCompteur).ListSubItems.Add , , rstProduit("quantite_produit")
            .ListItems(intCompteur).ListSubItems.Add , , rstProduit("prix_produit")
        End With
        intCompteur = intCompteur + 1
        rstProduit.MoveNext
    Loop
       
    'On Spécifie l'affichage de lstProduit en mode "Détails"
    lstProduit.View = lvwReport
End Sub
Afficher la suite 

4 réponses

Répondre au sujet
chaibat05 1884 Messages postés samedi 1 avril 2006Date d'inscription 20 novembre 2007 Dernière intervention - 17 août 2007 à 03:34
+3
Utile
Salut,


Il  suffit de paramètrer ta procédure de remplissage en lui passant
l' argument Categorie sur lequel tu veux faire la sélection...




Private Sub RemplissageProduit(xCategorie As String)
   >...DECLARATIONS
  
  'Vidage de la liste au démarrage (et à chaque choix d' une  catégorie)
  'sinon tout va s'ajouter
    Me.lstProduit.ListItems.Clear
    
    'Récupération du numéro de catégorie dans la base de données
     'avec comme critere de sélection xCategorie


     RequeteCategorie = "SELECT num_categorie FROM categorie WHERE nom_categorie=" & "'" & xCategorie   & "'"
 
    ET LA SUITE...
End Sub


>>le choix de la catégorie se fera dans
 Private Sub cboCategorie_Change()
      'tu appelles ta Sub avec le text du combo 
       Call RemplissageProduit(Me.cboCategorie.Text)
 End Sub


>> Et dans
Private Sub RemplirComboBox()
    Dim rst As New ADODB.Recordset
     'Vidage de la liste au démarrage sinon tout va s'ajouter
      Me.cboCategorie.Clear
      
    'Récupération dans la base de données
      rst.Open "SELECT num_categorie, nom_categorie FROM categorie", mCnx, adOpenForwardOnly
     
    'On parcours toute la base de données et on ajoute chaque nom de catégorie dans la combo box
 
     'N' oublies pas de tester pour savoir si la table Categories est pleine
  
      If rst.Bof And rst.Eof Then
          MsgBox "Table vide !"
          Exit Sub
       End If
  
     Do Until rst.EOF
           Me.cboCategorie.AddItem rst.Fields("nom_categorie").Value
           rst.MoveNext
      Loop
   
   >>tu ajoutes
 
     Me.cboCategorie.Selected(0) =True => le premier élément
     'tu remplis ta listview avec cet élément
     Call RemplissageProduit(Me.cboCategorie.Text)
 
     'je me demande même si cette dernière ligne n' est pas  inutile !!
     'puisque Me.cboCategorie.Selected(0)=True équivaut à un appel à cboCategorie_Change()
     'et donc à Call RemplissageProduit(Me.cboCategorie.Text)..Mais bon , c' est pas si grave !
End Sub





<hr />

I LIKE TO BE HERE WHEN I CAN


<hr />
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de chaibat05
chaibat05 1884 Messages postés samedi 1 avril 2006Date d'inscription 20 novembre 2007 Dernière intervention - 17 août 2007 à 06:47
+3
Utile
D' abord la méthode Add ne s' applique qu' aux ListItems.
Pour les autres colonnes, lorsqu'il s' agit de les remplir, on utilise Subitems
et non ListSubItems.


Dim intCompteur As Integer
intCompteur =0
Do While Not rstProduit.EOF     
        intCompteur =intCompteur +1
        With lstProduit
            'On ajoute une ligne et on la renseigne
             .ListItems.Add  intCompteur , , rstProduit("num_produit")
             .ListItems(intCompteur).SubItems(1)= rstProduit("nom_produit")
            .ListItems(intCompteur).SubItems.(2)= rstProduit("quantite_produit")
            .ListItems(intCompteur).SubItems(3)= rstProduit("prix_produit")
            ...
        End With
       
        rstProduit.MoveNext
 Loop







<hr />

I LIKE TO BE HERE WHEN I CAN


<hr />
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de chaibat05
cs_Webjojo 9 Messages postés samedi 20 novembre 2004Date d'inscription 17 août 2007 Dernière intervention - 17 août 2007 à 04:42
0
Utile
Je te remercie pour ton aide, surtout à cette heure-ci :)

j'ai un autre problème maintenant.
Lorsque j'execute mon code, Visual Basic me retourne le message au niveau de ma ListView :

"Compile error:
   Method or data member not found"

Lorsque je regarde où apparait le message d'erreur, VB me dit qu'il se trouve au niveau de mon "ListSubItems"

Do Until rstProduit.EOF
       
        With lstProduit
            'On ajoute une ligne et on la renseigne
            With .ListItems
                .Add , , rstProduit("num_produit")
            End With
           
            'On renseigne les autres colonnes
            ************** APPARITION DE L'ERREUR *******************
            .ListItems(intCompteur).ListSubItems.Add , , rstProduit("nom_produit")
            **************** FIN DE L'ERREUR *************************
            .ListItems(intCompteur).ListSubItems.Add , , rstProduit("quantite_produit")
            .ListItems(intCompteur).ListSubItems.Add , , rstProduit("prix_produit")
        End With
        intCompteur = intCompteur + 1
        rstProduit.MoveNext
    Loop

Je pense pas avoir d'erreur de syntaxe car j'éi déjà écris le même type de code autre part. En fait je veux afficher tous les champs de mon RecordSet dans un tableau multi-colonne.

Si quelqu'un sait....
Commenter la réponse de cs_Webjojo
cs_Webjojo 9 Messages postés samedi 20 novembre 2004Date d'inscription 17 août 2007 Dernière intervention - 17 août 2007 à 15:12
0
Utile
Alors là je tiens vraiment à remercier ce forum car sans lui je n'aurais pas pu réaliser mon projet de fin d'année :)

Merci à toi Chaibat05 et pour ton aide 
Commenter la réponse de cs_Webjojo

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.