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 et affichage de contenu de table


Sujet :

Composants VCL Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations forums :
    Inscription : Février 2009
    Messages : 94
    Par défaut Treeview et affichage de contenu de table
    Salut

    Je vais entrer au vif du sujet :
    Le but est d'afficher le contenu d'une table dans un Treeview :
    La table "CATEGORIES" a la structure suivante :
    Index, CatgeoryName, ParentCat

    Par exemple :
    1, Delphi, 0
    2, Base de Données, 1
    3, Composants, 1
    4, Graphisme, 1
    5, HTML, 0
    6, Scripts, 5
    7, Animations, 5

    Ce qui peut interprété comme :
    La categorie Delphi (Enregistrement N°1) n'a pas de categorie parent.
    La categorie Base de données, composants et graphisme ont pour categorie parent l'enregistrement N°1 (soit la cat Delphi) etc.

    Aussi il est possible d'avoir :
    8, Flash, 7
    Qui est une categorie dont la cat parent est l'enreg N°7 (Animation) qui est en lui meme un sous categorie de HTML.

    Pour charger le contenu de cette table dans un TV j'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    Var
    I:Integer;
    N:TTreeNode;
    Begin
    With FDATA.IBCAT Do
         Begin
         Close;
         SQL.Clear;
         SQL.Add('SELECT * FROM "Categories" WHERE SUB = 0');
         Open;
         DisableControls;
         First;
         While Not Eof Do
              Begin
              N:=TVURI.Items.Add(Nil,FieldByName('NAM').AsString);
              N.ImageIndex:=FieldByName('IDX').AsInteger;
              Next;
              End;
     
         For I:=TVURI.Items.Count-1 DownTo 0 Do
              Begin
              If TVURI.Items[I].Parent=Nil Then
                   Begin
                   Close;
                   SQL.Clear;
                   SQL.Add('SELECT * FROM "Categories" WHERE SUB = '+IntToStr(TVURI.Items[I].ImageIndex)+')');
                   Open;
                   First;
                   While Not Eof Do
                        Begin                    N:=TVURI.Items.AddChild(TVURI.Items[I],FieldByName('NAM').AsString);
                        N.ImageIndex:=FieldByName('IDX').AsInteger;
                        Next;
                        End;
                   End;
              End;
         EnableControls;
         Close;
         End;
    End;
    Mais ca ne charge que les racines et les sous categorie directes enfant
    Je voudrais avoir un code complémentaire a celui ci qui puisse charger recursivement tout les enregistrement dans le treeview parceque je ne sais pas combien de niveau de souscat ma table sera remplie.

    J'espere été assez clair merci pour votre aide.

  2. #2
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 939
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 939
    Par défaut
    Il faut que ta fonction soit récursive, réexecutée à chaque index.
    Avec ce principe, on ne peut pas utiliser un TQuery posé sur la fiche. Il faut en créer un dynamiquement à chaque appel:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    procedure TForm1.AddNode(aParentNode :TTreeNode; aSub :string);
    var
      Query :TQuery;
      Node  :TTreeNode;
     
    begin
      with TQuery.Create(nil) do
      try
        DatabaseName := ...; //etc.
        SQL.Text := 'SELECT * FROM "Categories" WHERE SUB = ' +aSub;
        Open;
     
        while not EOF do
        begin
          //Ajout du noeud...
          Node := tvURI.Items.AddChild(aParentNode, FieldByName('NAM').AsString);
     
          //...et recherche des sous-noeuds (Récursion)
          AddNode(Node, FieldByName('IDX').AsString);
     
          Next;
        end;
     
      finally
        Free;
      end;
    end;
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      AddNode(nil, 0);
    end;
    Le remplissage peut prendre beaucoup de temps en fonction de la taille de la table. Une autre approche serait de ne remplir les sous-noeuds que lorsque le noeud parent est sélectionné.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    94
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations forums :
    Inscription : Février 2009
    Messages : 94
    Par défaut
    AndNotOr Merci beaucoup.
    Le bout de code marche a merveille, astucieux le renvoi de chaque enregistrement à son parent ce qui crée chaque noeud (enregistrement) dans sa place automatiquement, j'y avais pas pensé, encore une fois merci.
    PS : C'est pour une application de Bookmarks sur laquelle je travaille, donc un utilisateur (Normal bien sur) risque au max de créer une centaine de catégorie et sous catégorie donc ca n'a pas grand effet sur le temps utilisé au chargement.

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

Discussions similaires

  1. [MySQL] Affichage du contenu d'une table
    Par Raphaelphp dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 10/02/2014, 13h18
  2. Affichage du contenu d'une table interne
    Par soufiane669 dans le forum SAP
    Réponses: 5
    Dernier message: 17/05/2011, 15h24
  3. Réponses: 8
    Dernier message: 23/07/2010, 10h42
  4. [MySQL] affichage du contenu d'une table
    Par danièle100 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 08/04/2010, 11h20
  5. affichage du contenu d'un fichier texte
    Par axel-erator dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 02/08/2005, 16h06

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