Fórum Treeview filhos dos filhos #325714
20/07/2006
0
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.
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
Curtir tópico
+ 0
Responder
Posts
20/07/2006
Djorius
Você tem que usar uma função recursiva para isso. Imagine uma tabela com a seguinte estrutura:
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:
acho que é isso.
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.
Responder
Gostei + 0
21/07/2006
Lucianoedgard
caro djorius, valeu a ajuda e irei testar esse codigo agora,
abraço
abraço
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)