Bonjour,
Je suis sur une appli de gestion de stocks en VB6
L'appli présente certains résultats (liste de pièces par exemple, liste de fournisseurs ...) sous forme de Listview, et d'autres (nomenclatures, cas d'emplois par exemple) sous forme de TreeView
Lorsque dans une fenêtre on change une propriété d'un objet de la base de donnée (par exemple on change la propriété "famille de produits" d'un composant), il convient de mettre à jour dynamiquement les autres fenêtres ouvertes dès lors que cela est pertinent (dans l'exemple il faudra mettre à jour la fenêtre listant tous les composants appartenant à la famille de produits en question, soit pour ajouter ce composant si cette fenêtre affiche la nouvelle famille, soit en enlevant le composant si cette fenêtre affiche la liste des composants de l'ancienne famille)
Si, brutalement, j'efface tout et je ré affiche tout, pour l'utilisateur c'est vraiment désagréable à regarder, il vaut mieux ne changer que ce qui change !
Pour ça je procède (synthétiquement) ainsi :
Je regarde si le composant existe dans la ListView et s'il n'y est pas je l'ajoute (ensuite je le mets à jour)
ou le TreeView
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Set pL = ListeResultat.ListItems(pRS!Cle) If pL Is Nothing Then Set pL = ListeResultat.ListItems.Add(, pRS!Cle, Valeur) End If
Puis je renseigne le Tag de l'élément (ListItem ou Node) de façon à mémoriser qu'il est pertinent
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 Sub AddNode() Set pNode = Nomenclature.Nodes(pRS!Cle) If pNode Is Nothing Then Set pNode = Nomenclature.Nodes.Add(, tvwFirst, pRS!Cle, Valeur) If pRS!Fils Then 'Renseigner les fils AddNode End if End If
Une fois balayé tout le recordset, je suis sûr davoir au moins tous les items (les existants et les nouveaux) à jour, mais j'ai encore les supprimés
Pour enlever les supprimés,
Je repasse en revue tous les items, et je les supprime si le tag n'est pas renseigné
Enfin, en prévision du rafraichissement suivant, je repasse une nouvelle fois tous les items et je met le tag à vide.
Cela marche bien avec un ListView
Mais avec un TreeView, cela ne marche qu'au premier niveau d'arborescence, pas aux suivants.
Ce problème a sûrement une solution élégante mais je ne vois pas laquelle.
J'espère que vous pourrez m'aider à la trouver, où trouver un endroit où elle est déja expliquée
Merci
Partager