Treeview filhos dos filhos

Delphi

20/07/2006

caro amigos, estou com problema de ´nao dominar o componente´ :D e estou com um certo problema. Tenho uma tabela contendo alguns registros que sao filhos sem pais e outros flihos de filhos e assim sucessivamente.
Ex.:

Projeto
|_Nodo1
|___>Nodo11
|___>Nodo12
|_____>Nodo121
|_Nodo2
|__>Nodo21
|____>Nodo211
|______>Nodo2111

a estrutura acima e guardada em uma tabela contendo o codigo de seu pai, so que na hora de montar estou com dificuldades de saber onde ele entrara na estrutura da arvore, ou seja inserir o filhos nos pais devidos. Se puderem postar o codigo aqui ficarei muito agradecido.

Abraços e ate a proxima.


Lucianoedgard

Lucianoedgard

Curtidas 0

Respostas

Djorius

Djorius

20/07/2006

Você tem que usar uma função recursiva para isso. Imagine uma tabela com a seguinte estrutura:

CREATE TABLE TREEVIEW_ITEMS(
CODIGO INTEGER NOT NULL,
TEXTO VARCHAR(40),
ITEM_MESTRE INTEGER,
CONSTRAINT "PK_TREEVIEWITEMS" PRIMARY KEY("CODIGO")
);


No exemplo, vou considerar o primeiro item da TreeView como sendo único e fixo. A coluna ITEM_MESTRE guarda o código do item onde ele deve estar. para carregar faça o seguinte:

procedure TForm1.FormCreate(Sender: TObject);
var tmp: TTreeNode;
begin
   tmp := TreeView1.Items.Add(nil,´Raiz´);
   CarregaItens(tmp,0);
end;

procedure TForm1.CarregaItens(Parent: TTreeNode; Codigo: Integer);
var TN: TTreeNode;
      TmpIBSQL: TIBSQL;
begin
   TmpIBSQL := TIBSQL.Create(nil);
   with TmpIBSQL do
   begin
      Transaction := IBTransaction1;
      Database := MainForm.Database;
      if not Transaction.Active then Transaction.StartTransaction;
      Close;
      SQL.Clear;
      SQL.Add(´SELECT CODIGO, TEXTO FROM TREEVIEW_ITEMS´);
      SQL.Add(´WHERE ITEM_MESTRE=:COD´);
      ParamByName(´COD´).AsInteger := Codigo;
      ExecQuery;
      while not eof do
      begin
         TN := TreeView1.Items.Add(Parent,Fields[1].AsString,nil);
         CarregaItens(TN,Fields[0].AsInteger);
         //
         Next;
      end;
   end;
   FreeAndNil(TmpIBSQL);
end;


acho que é isso.


GOSTEI 0
Lucianoedgard

Lucianoedgard

20/07/2006

caro djorius, valeu a ajuda e irei testar esse codigo agora,

abraço


GOSTEI 0
POSTAR