Como criar treeview baseado em banco de dados

21/06/2011

0

Olá amigos do fórum, boa noite, venho com uma dúvida, na qual sempre encontro ajuda dos amigos aqui.   Em um form, tenho dois componentes, do lado esquerdo o treeviews, e do lado direito um listview.   O que preciso: 1 - que no treeview, ele crie automaticamente com intes que esteja em uma pequena tabela 2 - Ao clicar em um item do treview ele atualiza o listview, com o conteudo da tabela relacionada.   O que tenho   Tabela um   - classes Tabela dois - alunos   As modificações, inserções serão no tradicional, em um form de cadastro, mas preciso que na janela do form principal tenha isso.   Como devo fazer, para que o treview busque o conteudo da tabela classe, e ao clicar em algum item do treeview ele abra a tabela de aluno relacionada a ela no listview do lado.     Estrutura   tbclasse classe_id - integer classe_nome - varchar   tbaluno aluno_id - integer aluno_classeid - integer aluno_nome - varchar     Aradeço a todos.
Júnior Sistemas

Júnior Sistemas

Responder

Post mais votado

04/07/2011

Bom dia.

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

Marcos Barbosa
Responder

Mais Posts

04/07/2011

Marcos Barbosa

Bom dia.

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






Responder

04/07/2011

Emerson Nascimento

Olá amigos do fórum, boa noite, venho com uma dúvida, na qual sempre encontro ajuda dos amigos aqui.   Em um form, tenho dois componentes, do lado esquerdo o treeviews, e do lado direito um listview.   O que preciso: 1 - que no treeview, ele crie automaticamente com intes que esteja em uma pequena tabela 2 - Ao clicar em um item do treview ele atualiza o listview, com o conteudo da tabela relacionada.   O que tenho   Tabela um   - classes Tabela dois - alunos   As modificações, inserções serão no tradicional, em um form de cadastro, mas preciso que na janela do form principal tenha isso.   Como devo fazer, para que o treview busque o conteudo da tabela classe, e ao clicar em algum item do treeview ele abra a tabela de aluno relacionada a ela no listview do lado.     Estrutura   tbclasse classe_id - integer classe_nome - varchar   tbaluno aluno_id - integer aluno_classeid - integer aluno_nome - varchar     Aradeço a todos.



se você puder publicar seu e-mail, passo um exemplo que tenho aqui. bem simples de entender e creio que atenda a sua necessidade.

Responder

04/07/2011

Adilson Rumao

Emerson você pode mandar um exemplo pra mim?
Estou com uma dúvida com relação a isso tbm.

Desde já obrigado pela atenção.

adilsonrumao@gmail.com
Responder

21/09/2011

Frederico Brigatte***

Eu também quero um exemplo simples, poderia enviar para:

frederico.brigatte@itelefonica.com.br?

É exatamente que preciso.
Responder

25/02/2012

Silvano Azevedo

Boas

se puder enviar o exemplo via e-mail agradeço
xavierctba@msn.com

xavier
Responder

02/04/2013

Frederico Brigatte***

Emerson,poderia me enviar o exemplo? No aguardo.
Responder

03/04/2013

Emerson Nascimento

mando pra qual email?
Responder

03/04/2013

Frederico Brigatte***

frederico.brigatte@gmail.com, agradeceria muito a ajuda...
Responder

03/04/2013

Frederico Brigatte***

Emerson,

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
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar