Fórum Como criar treeview baseado em banco de dados #403508
21/06/2011
0

Júnior Sistemas
Curtir tópico
+ 0Post mais votado
04/07/2011
Aqui vai um exemplo mais completo, mas acho que pode lhe ajudar bastante.
Segue fonte abaixo.
Objeto a ser usado:
TChaveTree = class
codigo : string;
tipo : string;
CodigoAnterior : string;
end;
Declare o mesmo acima da class (TForm)
procedures Utilizadas
{
procedure InsereSubItem(Raiz: TTreeNode; Titulo: String; Imagem, Nivel: Integer);
procedure MontaTiposDeEnsino(Raiz : TTreeNode);
procedure MontaCursosDeEnsino(TNTitulo, TNTipoClassi : TTreeNode);
procedure MontaSeriesDeEnsino(TNTitulo, TNTipoEnsino : TTreeNode);
procedure MontaTurmasDeEnsino(TNTitulo, TNTipoTurnos : TTreeNode);
}
procedure TFormViewAcademico.InsereSubItem(Raiz: TTreeNode; Titulo: String;
Imagem, Nivel: Integer);
var TN: TTreeNode;
C : TChaveTree;
begin
C := TChaveTree.Create;
TN := Tree.Items.AddChildObject(Raiz, Titulo, C);
TN.ImageIndex := Imagem;
TN.StateIndex := Nivel;
TN.HasChildren := true;
end;
procedure TFormViewAcademico.FormShow(Sender: TObject);
begin
//Tree - é o componente do tree-view
screen.cursor := crHourGlass;
try
Tree.Items.BeginUpdate;
Tree.Items.Clear;
InsereSubItem(nil,'ENSINOS',0,0);
finally
Tree.Items.EndUpdate;
screen.cursor := crDefault;
end;
end;
//Arvore completa desde o tipo de ensino até a turma
-Anos
--Ensinos
---Cursos
-----Series
-------Turmas
procedure TFormViewAcademico.MontaTiposDeEnsino(Raiz: TTreeNode);
var
C : TChaveTree;
TN : TTreeNode;
begin
try
Qry.Close;
Qry.SQL.Clear;
Qry.SQL.Add('seu comando');
cds.Close;
Cds.Open;
Cds.First;
while not Cds.Eof do
begin
C := TChaveTree.Create;
C.Codigo := Cds.FieldByName('Codigo').AsString;
c.CodigoAnterior := Cds.FieldByName('Codigo').AsString;
C.Tipo := 'CLASSIFICACAO';
TN := Tree.Items.AddChildObject(Raiz, Cds.FieldByName('Descricao').AsString, C);
TN.ImageIndex := 0;
InsereSubItem(TN,'Cursos',1,1);
TN.HasChildren := true;
Cds.Next;
end;
finally
Tree.Items.EndUpdate;
screen.cursor := crDefault;
end;
end;
procedure TFormViewAcademico.MontaCursosDeEnsino(TNTitulo,
TNTipoClassi: TTreeNode);
var
C : TChaveTree;
CodAnterior: string;
TN : TTreeNode;
begin
try
C := TNTipoClassi.Data;
CodAnterior := c.CodigoAnterior;
Qry.Close;
Qry.SQL.Clear;
Qry.SQL.Add('seu comando');
Qry.ParamByName('codigo').AsInteger := StrToInt(c.codigo);
cds.Close;
Cds.Open;
Cds.First;
while not Cds.Eof do
begin
C := TChaveTree.Create;
C.Codigo := Cds.FieldByName('Codigo').AsString;
c.CodigoAnterior := CodAnterior;
C.Tipo := 'CURSOS';
TN := Tree.Items.AddChildObject(TNTitulo, Cds.FieldByName('Descricao').AsString, C);
TN.ImageIndex := 1;
InsereSubItem(TN,'Séries',2,2);
TN.DropTarget := true;
Cds.Next;
end;
finally
Tree.Items.EndUpdate;
screen.cursor := crDefault;
end;
end;
procedure TFormViewAcademico.MontaSeriesDeEnsino(TNTitulo,
TNTipoEnsino: TTreeNode);
var
C : TChaveTree;
CodAnterior: string;
TN : TTreeNode;
begin
try
C := TNTipoEnsino.Data;
CodAnterior := c.CodigoAnterior;
Qry.Close;
Qry.SQL.Clear;
Qry.SQL.Add('seu comando');
Qry.ParamByName('codigo').AsInteger := StrToInt(c.codigo);
cds.Close;
Cds.Open;
Cds.First;
while not Cds.Eof do
begin
C := TChaveTree.Create;
C.Codigo := Cds.FieldByName('Codigo').AsString;
c.CodigoAnterior := CodAnterior;
C.Tipo := 'SERIES';
TN := Tree.Items.AddChildObject(TNTitulo, Cds.FieldByName('Descricao').AsString, C);
TN.ImageIndex := 2;
InsereSubItem(TN,'Turmas',3,3);
TN.DropTarget := true;
Cds.Next;
end;
finally
Tree.Items.EndUpdate;
screen.cursor := crDefault;
end;
end;
procedure TFormViewAcademico.MontaTurmasDeEnsino(TNTitulo,
TNTipoTurnos: TTreeNode);
var
C : TChaveTree;
CodAnterior: string;
TN : TTreeNode;
a, m, d : word;
begin
DecodeDate(Now,a,m,d);
try
C := TNTipoTurnos.Data;
CodAnterior := c.CodigoAnterior;
Qry.Close;
Qry.SQL.Clear;
Qry.SQL.Add('seu comando');
Qry.ParamByName('codigo').AsInteger := StrToInt(c.codigo);
cds.Close;
Cds.Open;
Cds.First;
while not Cds.Eof do
Marcos Barbosa

Gostei + 1
Mais Posts
04/07/2011
Marcos Barbosa
Aqui vai um exemplo mais completo, mas acho que pode lhe ajudar bastante.
Segue fonte abaixo.
Objeto a ser usado:
TChaveTree = class
codigo : string;
tipo : string;
CodigoAnterior : string;
end;
Declare o mesmo acima da class (TForm)
procedures Utilizadas
{
procedure InsereSubItem(Raiz: TTreeNode; Titulo: String; Imagem, Nivel: Integer);
procedure MontaTiposDeEnsino(Raiz : TTreeNode);
procedure MontaCursosDeEnsino(TNTitulo, TNTipoClassi : TTreeNode);
procedure MontaSeriesDeEnsino(TNTitulo, TNTipoEnsino : TTreeNode);
procedure MontaTurmasDeEnsino(TNTitulo, TNTipoTurnos : TTreeNode);
}
procedure TFormViewAcademico.InsereSubItem(Raiz: TTreeNode; Titulo: String;
Imagem, Nivel: Integer);
var TN: TTreeNode;
C : TChaveTree;
begin
C := TChaveTree.Create;
TN := Tree.Items.AddChildObject(Raiz, Titulo, C);
TN.ImageIndex := Imagem;
TN.StateIndex := Nivel;
TN.HasChildren := true;
end;
procedure TFormViewAcademico.FormShow(Sender: TObject);
begin
//Tree - é o componente do tree-view
screen.cursor := crHourGlass;
try
Tree.Items.BeginUpdate;
Tree.Items.Clear;
InsereSubItem(nil,'ENSINOS',0,0);
finally
Tree.Items.EndUpdate;
screen.cursor := crDefault;
end;
end;
//Arvore completa desde o tipo de ensino até a turma
-Anos
--Ensinos
---Cursos
-----Series
-------Turmas
procedure MontaTiposDeEnsino(Raiz: TTreeNode);
var
C : TChaveTree;
TN : TTreeNode;
begin
try
Qry.Close;
Qry.SQL.Clear;
Qry.SQL.Add('seu comando');
cds.Close;
Cds.Open;
Cds.First;
while not Cds.Eof do
begin
C := TChaveTree.Create;
C.Codigo := Cds.FieldByName('Codigo').AsString;
c.CodigoAnterior := Cds.FieldByName('Codigo').AsString;
C.Tipo := 'CLASSIFICACAO';
TN := Tree.Items.AddChildObject(Raiz, Cds.FieldByName('Descricao').AsString, C);
TN.ImageIndex := 0;
InsereSubItem(TN,'Cursos',1,1);
TN.HasChildren := true;
Cds.Next;
end;
finally
Tree.Items.EndUpdate;
screen.cursor := crDefault;
end;
end;
procedure MontaCursosDeEnsino(TNTitulo,
TNTipoClassi: TTreeNode);
var
C : TChaveTree;
CodAnterior: string;
TN : TTreeNode;
begin
try
C := TNTipoClassi.Data;
CodAnterior := c.CodigoAnterior;
Qry.Close;
Qry.SQL.Clear;
Qry.SQL.Add('seu comando');
Qry.ParamByName('codigo').AsInteger := StrToInt(c.codigo);
cds.Close;
Cds.Open;
Cds.First;
while not Cds.Eof do
begin
C := TChaveTree.Create;
C.Codigo := Cds.FieldByName('Codigo').AsString;
c.CodigoAnterior := CodAnterior;
C.Tipo := 'CURSOS';
TN := Tree.Items.AddChildObject(TNTitulo, Cds.FieldByName('Descricao').AsString, C);
TN.ImageIndex := 1;
InsereSubItem(TN,'Séries',2,2);
TN.DropTarget := true;
Cds.Next;
end;
finally
Tree.Items.EndUpdate;
screen.cursor := crDefault;
end;
end;
procedure MontaSeriesDeEnsino(TNTitulo,
TNTipoEnsino: TTreeNode);
var
C : TChaveTree;
CodAnterior: string;
TN : TTreeNode;
begin
try
C := TNTipoEnsino.Data;
CodAnterior := c.CodigoAnterior;
Qry.Close;
Qry.SQL.Clear;
Qry.SQL.Add('seu comando');
Qry.ParamByName('codigo').AsInteger := StrToInt(c.codigo);
cds.Close;
Cds.Open;
Cds.First;
while not Cds.Eof do
begin
C := TChaveTree.Create;
C.Codigo := Cds.FieldByName('Codigo').AsString;
c.CodigoAnterior := CodAnterior;
C.Tipo := 'SERIES';
TN := Tree.Items.AddChildObject(TNTitulo, Cds.FieldByName('Descricao').AsString, C);
TN.ImageIndex := 2;
InsereSubItem(TN,'Turmas',3,3);
TN.DropTarget := true;
Cds.Next;
end;
finally
Tree.Items.EndUpdate;
screen.cursor := crDefault;
end;
end;
procedure MontaTurmasDeEnsino(TNTitulo,
TNTipoTurnos: TTreeNode);
var
C : TChaveTree;
CodAnterior: string;
TN : TTreeNode;
a, m, d : word;
begin
DecodeDate(Now,a,m,d);
try
C := TNTipoTurnos.Data;
CodAnterior := c.CodigoAnterior;
Qry.Close;
Qry.SQL.Clear;
Qry.SQL.Add('seu comando');
Qry.ParamByName('codigo').AsInteger := StrToInt(c.codigo);
cds.Close;
Cds.Open;
Cds.First;
while not Cds.Eof do
begin
C := TChaveTree.Create;
C.Codigo := Cds.FieldByName('Codigo').AsString;
c.CodigoAnterior := CodAnterior;
C.Tipo := 'TURMAS';
TN := Tree.Items.AddChildObject(TNTitulo, Cds.FieldByName('Descricao').AsString, C);
TN.ImageIndex := 4;
TN.DropTarget := true;
Cds.Next;
end;
finally
Tree.Items.EndUpdate;
screen.cursor := crDefault;
end;
end;
//Expandindo o tree-view
procedure TreeExpanding(Sender: TObject;
Node: TTreeNode; var AllowExpansion: Boolean);
begin
if Node.GetFirstChild <> nil
then exit;
Case Node.StateIndex of
0 : MontaTiposDeEnsino(Node);
1 : MontaCursosDeEnsino(Node, Node.GetPrev);
2 : MontaSeriesDeEnsino(Node, Node.GetPrev);
3 : MontaTurmasDeEnsino(Node, Node.GetPrev);
end;
end;
//demonstrando os dados de alunos da turma
//Click do tree-view
procedure TreeClick(Sender: TObject);
var
C : TChaveTree;
D : Tchave;
ListItem : TListItem;
begin
try
if Tree.Selected = nil
then exit
else // selecionou algum Node
begin
ListaAlunos.Items.Clear;
C := Tree.Selected.Data;
if C.tipo = 'TURMAS'
then
BEGIN // exibir os alunos da turma
with Qry do
begin
close;
sql.Clear;
sql.add('seu comando');
end;
with Cds do
begin
close;
Qry.ParamByName('turma').AsInteger := StrToInt(c.codigo);
Open;
end;
cds.First;
while not cds.Eof do
begin
D := Tchave.create;
D.Codigo := cds.fieldbyname('codigo').AsString;
d.Tipo := cds.fieldbyname('nome').AsString;
ListItem := ListaAlunos.Items.Add;
ListItem.Data := D;
cds.Next;
end;
ListaAlunos.Selected := ListaAlunos.TopItem;
end;
end;
except
on E: Exception do
MsgErro('Houve algum erro!'#13
+' Informe esta mensagem ao suporte'#13
+ E.Message);
end;
end;
Espero que tenha ajudado.
Qualquer coisa entra em contato.
Email : marcosfbarbosa@netsite.com.br
Att. Marcos
Gostei + 0
04/07/2011
Emerson Nascimento
se você puder publicar seu e-mail, passo um exemplo que tenho aqui. bem simples de entender e creio que atenda a sua necessidade.
Gostei + 0
04/07/2011
Adilson Rumao
Estou com uma dúvida com relação a isso tbm.
Desde já obrigado pela atenção.
adilsonrumao@gmail.com
Gostei + 0
21/09/2011
Frederico Brigatte***
frederico.brigatte@itelefonica.com.br?
É exatamente que preciso.
Gostei + 0
25/02/2012
Silvano Azevedo
se puder enviar o exemplo via e-mail agradeço
xavierctba@msn.com
xavier
Gostei + 0
02/04/2013
Frederico Brigatte***
Gostei + 0
03/04/2013
Emerson Nascimento
Gostei + 0
03/04/2013
Frederico Brigatte***
Gostei + 0
03/04/2013
Frederico Brigatte***
Não é bem isso que to querendo. Gostaria de preencher o TreeView com os itens do Menu do sistema e colocar CheckBox para quando clicar mostar ticado ou não.
É isso que to querendo. O que quero ta nesse link:
https://www.devmedia.com.br/forum/gravar-em-tabela-itens-do-menu/438291
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)