Bonjour,
J'utilise une table hiérarchique sur fichier avec des fichiers en liaisons
Famille --> Sous_Famille --> Produit
Habituellement pour ce genre de chose je remplissais la table hiérarchique par programmation en ajoutant arbitrairement une ligne racine à toute l’arborescence
Par exemple dans ce cas j'aurai pu ajouter à la racine une ligne "Catalogue"
Ainsi quand on clique sur le bouton ajouter suivant sur quelle ligne on est on sait quelle feuille ajouter
Sur "Catalogue" --> on ajoute uns Famille
Sur Famille --> on ajoute une Sous_Famille
Sur Sous_Famille --> on ajoute un Produit
Avec les tables hiérarchique sur fichiers je n'ai pas vu la possibilité d'ajouter une ligne racine.
Du coup quand on sélectionne une Famille je ne peux pas faire de distinction entre l'ajout d'une Famille ou d'une Sous_Famille
Pour contourner le problème j'ai fait un bouton ajouter avec flèche qui ouvre un menu contextuel qui permet de sélectionner ce qu'on veut ajouter Famille, Sous_Famille ou produit et d'ouvrir le bon formulaire
Pour les modifications c'est plus simple. J'ai ajouté 3 colonnes non visible liées aux index des 3 fichier.
Quand on clique sur le bouton modifier il suffit de savoir dans quelle colonne il y a un index > 0 pour savoir quel formulaire ouvrir.
Tout marche bien... ou presque...
Le problème c'est qu'après validation d'un formulaire pour un ajout ou une modification, je rafraîchis la table hiérarchique pour qu'elle s'actualise, la table enroule tout et sélectionne la première ligne
J'aimerai que la table ne change rien aux enroulés/déroulés
Je me suis dit qu'il faudrait que j'enregistre dans un tableau les états enroulés/déroulés des lignes avant l'ajout/modification puis utilisé le tableau pour rétablir les états enroulés/déroulés précédents
Dans l'aide j'ai trouvé la fonction TableEtatElément() qui est sensé renvoyer l'état d'un nœud d'un champ Table hiérarchique : enroulé, déroulé ou inexistant
J'ai trouvé par ailleurs les valeurs qui peuvent être renvoyées
-1 taErreur : Trace("Le noeud n'existe pas.")
1 taDéroule : Trace("Le noeud est déroulé.")
2 taEnroule : Trace("Le noeud est enroulé.")
Pour tester j'ai ajouter un bouton avec le code en dessous pour afficher dans un libellé la valeur retournée par un TableEtatElément() sur la ligne sélectionnée
Que les lignes sélectionnées soient enroulées ou déroulées TableEtatElément() renvoi toujours la même valeur 1 donc je ne sais pas faire la distinction
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 nNoLigneSelect est un entier = TableSelect(TABLEH_P2_Fam_SousFam_Prod) nEtat_EnrouléDéroulé est un entier = TableEtatElément(TABLEH_P2_Fam_SousFam_Prod, nNoLigneSelect) LIB_SansNom1 = nEtat_EnrouléDéroulé
Merci d'avance de votre aide, même de simple pistes de réflexion
Peut-être qu'il y a plus simple mais pour le moment je n'ai pas mis le doigt dessus
Partager