IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants VCL Delphi Discussion :

[Treeview] : Remplissage récursif


Sujet :

Composants VCL Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de freud
    Homme Profil pro
    Développeur
    Inscrit en
    Mai 2002
    Messages
    1 271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 271
    Par défaut [Treeview] : Remplissage récursif
    Bonsoir,

    Je suis a la recherche d'un petit code pour remplir d'une manière récursive un Treeview depuis une table contenant les champs :

    (ID, ID_PARENT, LIBELLE, etc...)

    Si quelqu'un saurait ...?

    Merci pour votre aide.

  2. #2
    Membre Expert Avatar de guillemouze
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    876
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 876
    Par défaut
    ma mere me disait toujours "les si n'aiment pas les rai".

    Tu n'as pas d'autre choix que d'effectuer les requetes pour trouver les enfants d'un id pere donné, et recursivement pour les enfants trouvés

  3. #3
    Membre éprouvé Avatar de freud
    Homme Profil pro
    Développeur
    Inscrit en
    Mai 2002
    Messages
    1 271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 271
    Par défaut
    c'est juste......

    Merci quand même

  4. #4
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 104
    Par défaut
    Tu peux aussi ne remplir que le Level 1, puis lors du OnExpanding (voir HasChildren pour afficher un + bidon), tu charge les enfants à ce moment, ainsi cela évite de créer une arbre de 3000 items pour rien, j'ai fait cela pour la Base de Registre ou pour la Codification CIM 10 et les Notes hierarchique de la CCAM, cela fonctionne à tous les coups !

    ne pas oublier BeginUpdate et EndUpdate, cela évite des lenteurs de remplissage par des tentatives d'affichage inutile
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  5. #5
    Membre éprouvé Avatar de freud
    Homme Profil pro
    Développeur
    Inscrit en
    Mai 2002
    Messages
    1 271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 271
    Par défaut
    Aucun problème pour remplir le level 1 mais pour les autres level qui ont d'autres et ainsi de suite..... mais bon.... je vais voir ca.

    Merci

  6. #6
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 104
    Par défaut
    normalement la fonction qui rempli le niveau 1 doit être la même que celle des niveaux suivant, faut juste gérer le Parent NULL ou Vide, mais cela doit être le même code, ou les paramètres sont un Noeud Parent et l'Id du Parent, rien de plus ...
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  7. #7
    Membre Expert Avatar de guillemouze
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    876
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 876
    Par défaut
    n'oublie pas que dans les TreeNode, tu as un Data, qui peut te servir par exemple a stocker ... l'id du noeud dans ta table

  8. #8
    Membre Expert

    Profil pro
    Leader Technique
    Inscrit en
    Juin 2005
    Messages
    1 756
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Leader Technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 756
    Par défaut
    Citation Envoyé par freud Voir le message
    Aucun problème pour remplir le level 1 mais pour les autres level qui ont d'autres et ainsi de suite..... mais bon.... je vais voir ca.

    Merci
    Tu as de nombreuses façons de procéder :
    1. La méthode indiquée par ShaiLeTroll : Cette méthode est intéressante si tu n'as pas besoin de construire l'arbre complet au chargement. Elle te permettra de faire le chargement des parties utilisées au fûr et à mesure des besoins. En revanche, si tu dois développer plus ou moins la totalité de l'arbre, c'est une méthode qui sera finalement assez gourmante car tu va exécuter une requête SQL par éléments dans l'arbre.

    2. Tu fais une requête SQL avec une CTE qui te permettra de charger l'arbre complet depuis la base de données, en une seule requête. Tu n'auras alors plus qu'à lire le résultat et construire les noeuds du TreeView.

    3. Tu fais le travail de la CTE à la main depuis le client : Tu fais une première requête qui te retourne le ou les noeuds racines. Puis une deuxième qui récupère les noeuds qui on pour parent les noeuds racines, puis une troisième pour avoir les noeuds qui ont pour parent les noeuds dont les parents sont les noeuds racines... Tu avances d'un niveau à chaque fois dans la hierarchie. Ca permet de limiter le nombre de requêtes SQL et ainsi que conserver des perfs descentes. Mais si ton SGBD le supporte, le mieux c'est la CTE.

    4. Si ton arborescence représente plus ou moins toute la table, tu fais un SELECT complet de la table et tu construits l'arbre progressivement en lisant les lignes une à une.

  9. #9
    Membre éprouvé Avatar de freud
    Homme Profil pro
    Développeur
    Inscrit en
    Mai 2002
    Messages
    1 271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 271
    Par défaut
    Citation Envoyé par guillemouze
    n'oublie pas que dans les TreeNode, tu as un Data, qui peut te servir par exemple a stocker ... l'id du noeud dans ta table
    Justement c'est la 1ere des choses que j'ai chercher et trouver pour stocker l'ID :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    CNode:=TreeView1.Items.Add(Cnode,IntToStr(i));  
    Cnode.Data:=pointer(i);
    En effet, la méthode de ShaiLeTroll est intérréssante mais les lignes seront limitée à quelques 200 ou 300 je préfère donc rapatrié toutes les informations.

    Citation Envoyé par Franck SORIANO
    ......Mais si ton SGBD le supporte, le mieux c'est la CTE.
    C'est avec FireBird et je crois qu'il le supporte depuis la version 2.1, je le ferais donc avec la CTE.

    guillemouze, ShaiLeTroll, Franck SORIANO, vous m'avez donner de trés bonnes pistes merci à vous

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. remplissage récursif d'un div
    Par rin01 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 05/01/2012, 19h10
  2. treeview remplissage à partir de base sql server
    Par pams37 dans le forum VB.NET
    Réponses: 3
    Dernier message: 28/04/2011, 14h12
  3. TreeView - Remplissage recurssif d'une table
    Par lejert dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 21/02/2007, 17h56
  4. Remplissage récursif d'un treeview.
    Par nek_kro_kvlt dans le forum Delphi
    Réponses: 4
    Dernier message: 07/12/2006, 08h38
  5. [c#]Remplissage d'un treeview
    Par denden dans le forum Windows Forms
    Réponses: 3
    Dernier message: 29/06/2006, 14h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo