cs_Webjojo
Messages postés9Date d'inscriptionsamedi 20 novembre 2004StatutMembreDernière intervention17 août 2007
-
17 août 2007 à 00:48
cs_Webjojo
Messages postés9Date d'inscriptionsamedi 20 novembre 2004StatutMembreDernière intervention17 août 2007
-
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 & "'"
'Récupération des champs des produits dans la base de données
RequeteProduit = "SELECT * FROM produit WHERE ref_categorie LIKE " & "'" & rstCategorie("num_categorie") & "'"
'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
chaibat05
Messages postés1883Date d'inscriptionsamedi 1 avril 2006StatutMembreDernière intervention20 novembre 20072 17 août 2007 à 03:34
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
chaibat05
Messages postés1883Date d'inscriptionsamedi 1 avril 2006StatutMembreDernière intervention20 novembre 20072 17 août 2007 à 06:47
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
cs_Webjojo
Messages postés9Date d'inscriptionsamedi 20 novembre 2004StatutMembreDernière intervention17 août 2007 17 août 2007 à 04:42
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.