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
-
Artigo
-
Artigo
-
Artigo
-
Artigo
-
Artigo