Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[WD10] Récupérer le chemin complet d'un élément treeview

6 réponses
Avatar
Rémy
Bonjour,

J'ai un petit problème sur lequel je patauge un peu... J'ai un treeview avec
niveau1, niveau2, niveau3, sous-niveau1, etc...
Tous ces éléments sont identifiés par un ID unique lors de la construction
du treeview. Le hic, quand j'essaye de raccrocher par exemple mon
sous-sous-niveau1 au sous-niveau1 par :
arbreajoute(montv,arbreid(mon-id-sous-niveau1)+tab+"sous-sous-niveau1")

ca passe pas...

Je rate un truc ?

Je remplis le treeview d'apres une bdd mysql qui contient les notions de
parents, pour raccrocher oucavabien...

Merci !
rémy

6 réponses

Avatar
Gilles TOURREAU
Rémy avait écrit le 08/08/2006 :
Bonjour,

J'ai un petit problème sur lequel je patauge un peu... J'ai un treeview avec
niveau1, niveau2, niveau3, sous-niveau1, etc...
Tous ces éléments sont identifiés par un ID unique lors de la construction du
treeview. Le hic, quand j'essaye de raccrocher par exemple mon
sous-sous-niveau1 au sous-niveau1 par :
arbreajoute(montv,arbreid(mon-id-sous-niveau1)+tab+"sous-sous-niveau1")

ca passe pas...

Je rate un truc ?

Je remplis le treeview d'apres une bdd mysql qui contient les notions de
parents, pour raccrocher oucavabien...

Merci !
rémy



arbreid() est une fonction qui permet uniquement de gérer les doublons
au niveau des feuilles.
Cette fonction s'utilise comme pour indicer les tableaux.
Je pense que tu n'as pas à gerer des noeuds doubles dans ton tree-view
et que tu fais fausse route...

En considérant que :

SousNiveau1 est une chaine = "Niveau1" + TAB + "SousNiveau1"
SousSousNiveau1 est une chaine = "SousSousNiveau2"
IdentifiantDeSousSousNiveau1 = 1664 //Identifiant dans la base de
données par exemple...

Il faut faire pour raccrocher SousSousNiveau1 à SousNiveau1 :

ArbreAjoute(Arbre, SousNiveau1 + TAB + SousSousNiveau1, NULL, NULL,
IdentifiantDeSousSousNiveau1)

Si je n'ai pas répondu à ta question, pourrais-tu être un peu plus
explicite auy niveau de ta base de données...

Cordialement

--
Gilles TOURREAU
Responsable informatique


Société P.O.S
Spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr
Avatar
Rémy
"Gilles TOURREAU" a écrit dans le message de news:


Bonjour,

arbreid() est une fonction qui permet uniquement de gérer les doublons au
niveau des feuilles.
Cette fonction s'utilise comme pour indicer les tableaux.
Je pense que tu n'as pas à gerer des noeuds doubles dans ton tree-view et
que tu fais fausse route...



Ok,

En considérant que :

SousNiveau1 est une chaine = "Niveau1" + TAB + "SousNiveau1"
SousSousNiveau1 est une chaine = "SousSousNiveau2"
IdentifiantDeSousSousNiveau1 = 1664 //Identifiant dans la base de données
par exemple...



Oui, mais dans certains cas, je ne connais pas le : niveau+tab+niveau+tab...
pour arriver la ou je veux...

Bon, pas evident et pas clair. Dans ma base de données, j'ai l'identifiant
du niveau "pere" ou raccrocher le "fils", mais je ne sais pas a quel niveau
peut se trouver le pere... ni si c'est a la racine, ni a un niveau 1 ou un
sous niveau n...

Est-ce plus clair ? ;o)

Merchi
rémy
Avatar
Gilles TOURREAU
Rémy a présenté l'énoncé suivant :
"Gilles TOURREAU" a écrit dans le message de news:


Bonjour,

arbreid() est une fonction qui permet uniquement de gérer les doublons au
niveau des feuilles.
Cette fonction s'utilise comme pour indicer les tableaux.
Je pense que tu n'as pas à gerer des noeuds doubles dans ton tree-view et
que tu fais fausse route...



Ok,

En considérant que :

SousNiveau1 est une chaine = "Niveau1" + TAB + "SousNiveau1"
SousSousNiveau1 est une chaine = "SousSousNiveau2"
IdentifiantDeSousSousNiveau1 = 1664 //Identifiant dans la base de données
par exemple...



Oui, mais dans certains cas, je ne connais pas le : niveau+tab+niveau+tab...
pour arriver la ou je veux...

Bon, pas evident et pas clair. Dans ma base de données, j'ai l'identifiant du
niveau "pere" ou raccrocher le "fils", mais je ne sais pas a quel niveau peut
se trouver le pere... ni si c'est a la racine, ni a un niveau 1 ou un sous
niveau n...

Est-ce plus clair ? ;o)

Merchi
rémy



Pour remplir une telle table dans un treeview il faut partir du sommet
de l'arbre (celui qui n'a pas de père)

admettons la structure de la table suivante :

IdNoeud //L'identifiant du Noeud
IdParent //L'identifiant du Parent
Blabla //Le blabla attaché à ce noeud

Soit une fonction récursive comme suis :

PROCEDURE Remplir(arbre, cheminBase, idNoeud)

HLitRecherchePremier(FICHIER, IdParent, idNoeud)
TANTQUE HTrouve(FICHIER) = Vrai
ArbreAjoute(arbre, cheminBase + TAB + FICHIER.Blabla, Null, Null,
FICHIER.IdNoeud)

Remplir(arbre, cheminBase + TAB + FICHIER.Blabla, FICHIER.IdNoeud)

HLitSuivant(FICHIER, IdParent)
FIN


Voilà suffit d'appeler la fonction comme ceci :
//On considère ici que le sommet de l'arbre possède un identifiant égal
à 0 dans la base de données.

HLitRecherchePremier(FICHIER, IdParent, 0)
Remplir(MonTRV, FICHIER.Blabla, 0)

Pour du mysql suffit de remplacer HlitRecherchePremier() par un bon
petit SELECT...

Petit plus :
Lorsque j'ai fais un ArbreAjoute() j'ai spécifié comme identifiant
l'identifiant du noeud dans la table.
Tu peux utiliser ainsi :

ArbreRecupèreIdentifiant(MonTRV, ArbreSelect(MonTRV))

Pour obtenir l'identifiant du noeud qui est sélectionné !!

Cordialement

--
Gilles TOURREAU
Responsable informatique


Société P.O.S
Spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr
Avatar
Rémy
"Gilles TOURREAU" a écrit dans le message de news:


Bonjour Gilles,

Merci pour ton code et surtout pour te pencher sur mon problème ;o)

Mais juste une question : donc, il est impossible, à partir de l'ID unique
d'un element dans un treeview de récupérer son chemin complet ? pas très
pratique quand même...

Merci !
rémy
Avatar
Gilles TOURREAU
Rémy a exprimé avec précision :
"Gilles TOURREAU" a écrit dans le message de news:


Bonjour Gilles,

Merci pour ton code et surtout pour te pencher sur mon problème ;o)

Mais juste une question : donc, il est impossible, à partir de l'ID unique
d'un element dans un treeview de récupérer son chemin complet ? pas très
pratique quand même...

Merci !
rémy



J'ai fais une demande au près de PC-Soft pour avoir une telle fonction
depuis la version 7.5... Elle sera sans doute intégré dans la version
15 de Windev !

En attendant l'idéal pour obtenir un chemin à partir d'un identifiant
et de le rechercher :

2 méthodes :
- Soit utiliser ArbreListeFils(), c'est simple à réaliser mais pas très
propre comme technique car cela nécessite une variable globale ou alors
une technique de chaine avec les pointeurs...
- Soit parcourir ton arbre en profondeur jusqu'à que tu trouves
l'identifiant correspondant (complexe pour un débutant car fonction
récursif !)

Je te donne vite fait un code à la volé pour la 2ème méthode :

PROCEDURE ArbreChercheIdentifiant(Arbre, CheminDépart, Identifiant)

MonFils est une chaine
Temp est une chaine

MonFils = ArbreRécupèreFils(Arbre, CheminDépart, aPremier)
TANTQUE MonFils <> "" ALORS
SI ArbreRécupèreIdentifiant(Arbre, CheminDépart + TAB + MonFils) =
Identifiant ALORS
RENVOYER CheminDépart + TAB + MonFils)
SINON
Temp = ArbreRechercheIdentifiant(Arbre, CheminDépart + TAB +
MonFils, Identifiant)
SI Temp <> "" ALORS
RENVOYER Temp
SINON
MonFils = ArbreRécupèreFils(Arbre, CheminDépart,
aSuivant)
FIN
FIN
FIN

RENVOYER ""


Suffit d'appeler la fonctionne comme ceci :

SI ArbreChercheIdentifiant(MonTRV, "Sommet", 1664) <> "" ALORS
Info("J'ai trouvéééééééééééééé !")
FIN

Cordialement

--
Gilles TOURREAU
Responsable informatique


Société P.O.S
Spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr
Avatar
Rémy
"Gilles TOURREAU" a écrit dans le message de news:


plein de bonnes choses...



Merci Gilles ! t'es un as ;o)

@+
rémy