Montar TreeView usando um DataSet

Veja nesta Quick como montar um TreeView usando um DataSet.

Olá galera, nesta Quick Tips, irei atender a um pedido de um leitor, onde o mesmo pediu para mostra como ler umas tabelas num banco qualquer, e preencher uma TreeView representando a estrutura do mesmo, veja o banco de dados :


Figura 1: Modelagem

Temos que mostrar uma árvore mais ou menos parecida com a seguinte :

Unidade Curso Turma
São Paulo Matemática Turmas M-A, Turma M-B.
Parana Letras Turmas L-A, Turma L-B.
Pará Ed. Fisica Turmas EF-A, Turma EF-B.

Vamos agora mostrar o script, feito para Firebird, veja

CREATE TABLE "UNIDADE" ( "IDUNIDADE" INTEGER NOT NULL, "DESCRICAO" VARCHAR(20), PRIMARY KEY ("IDUNIDADE") ); CREATE TABLE "CURSO" ( "IDCURSO" INTEGER NOT NULL, "IDUNIDADE" INTEGER NOT NULL, "DESCRICAO" VARCHAR(20), PRIMARY KEY ("IDCURSO") ); CREATE TABLE "TURMA" ( "IDTURMA" INTEGER NOT NULL, "IDCURSO" INTEGER NOT NULL, "DESCRICAO" VARCHAR(20), PRIMARY KEY ("IDTURMA") ); ALTER TABLE "CURSO" ADD FOREIGN KEY ("IDUNIDADE") REFERENCES "UNIDADE" ("IDUNIDADE") ON UPDATE NO ACTION ON DELETE NO ACTION ; ALTER TABLE "TURMA" ADD FOREIGN KEY ("IDCURSO") REFERENCES "CURSO" ("IDCURSO") ON UPDATE NO ACTION ON DELETE NO ACTION ;

Agora vamos a montagem do código para podermos montar o TreeView, adicione em uma nova aplicação, ClientDataSet, SQLDataSet, DataSetProvider, e no adicione a seguinte query, no SQLDataSet:

SELECT U.DESCRICAO DESCUNIDADE C.DESCRICAO DESCCURSO, T.DESCRICAO DESCTURMA, FROM TURMA T, CURSO C, UNIDADE U WHERE U.IDUNIDADE = C.IDUNIDADE AND C.IDCURSO = T.IDCURSO ORDER BY U.DESCRICAO, C.DESCRICAO, T.DESCRICAO

A partir daí façam a configuração dos 3 componentes, de forma tradicional.Adicione também um TreeView, e um botão para podermos executar a montagem da árvore, veja o layout do Form.

Figura 2: Layout do formulário

No Clique do Botão iremos implementar o seguinte código :

procedure TForm1.BitBtn1Click(Sender: TObject); Var ItemUltiimoCurso, ItemUltimaUnidade, ItemUltimaTurma: TTreeNode; xUnidadeAnt, xCursoAnt, xTurmaAnt: String; begin while not CDS.Eof do begin if xUnidadeAnt <> CDS.FieldByName('IDUNIDADE').AsString then begin ItemUltimaUnidade := TreeView1.Items.AddChild(Nil, CDS.FieldByName('DESCUNIDADE').AsString); end; if xCursoAnt <> CDS.FieldByName('IDCURSO').AsString then begin ItemUltiimoCurso := TreeView1.Items.AddChild(ItemUltimaUnidade, CDS.FieldByName('DESCCURSO').AsString); end; if xTurmaAnt <> CDS.FieldByName('IDTURMA').AsString then begin ItemUltimaTurma := TreeView1.Items.AddChild(ItemUltiimoCurso, CDS.FieldByName('DESCTURMA').AsAsString); end; xUnidadeAnt := CDS.FieldByName('IDUNIDADE').AsString; xCursoAnt := CDS.FieldByName('IDCURSO').AsString; xTurmaAnt := CDS.FieldByName('IDTURMA').AsString; CDS.Next; end; end;

Veja o Resultado final


Figura 3: Exemplo pronto

Fico por aqui ate à próxima.

Um abraço

Wesley Y

wesley@lithic.com.br

Artigos relacionados