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)
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
ou le TreeView
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
Puis je renseigne le Tag de l'élément (ListItem ou Node) de façon à mémoriser qu'il est pertinent
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