Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 10-04-2004
hibero hibero is offline
Miembro
 
Registrado: nov 2003
Posts: 104
Poder: 21
hibero Va por buen camino
Cargar un TTreeView desde una tabla

Necesito cargar un ttreeview desde una base de datos. Necsito información sobre cual es el metodo mas rápido para hacerlo

gracias
Responder Con Cita
  #2  
Antiguo 10-04-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Podrías buscar en torry alguna componente TreeView "db aware" que quizá sería lo óptimo. Manualmente quizá podrías optar por cargar los nodos de un nivel y cargar los hijos sólo cuando el usuario expanda un nodo. Para ello, al insertar un nodo debes poner su propiedad HasChildren en true y controlar el evento OnExpand (te lo estoy diciendo un poco de memoria pero es algo así). En este evento leerías los subnodos (nuevamente sólo un nivel) sin leer subnodos de tercer nivel y así sucesivamente.

// Saludos
Responder Con Cita
  #3  
Antiguo 10-04-2004
hibero hibero is offline
Miembro
 
Registrado: nov 2003
Posts: 104
Poder: 21
hibero Va por buen camino
conoces algun componente en particular que me puedas recomendar
Responder Con Cita
  #4  
Antiguo 10-04-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por hibero
conoces algun componente en particular que me puedas recomendar
Realmente no. Me viene en mente el VirtualTreeView que, a juzgar por los demos que incluye es verdaderamente sorprendente y en la página viene un descendiente para bases de datos. El problema con esta componente, según yo lo veo es que es un poco difícil comenzar a aprender a usarlo. Yo mismo no lo he hecho por falta de tiempo pero vale la pena. El control combina las capacidades de un TreeView y un ListView y sus resultados en cuanto a posibilidades de presentación son magníficos.

// Saludos
Responder Con Cita
  #5  
Antiguo 07-06-2004
arj2000 arj2000 is offline
Miembro
 
Registrado: abr 2004
Ubicación: Estocolmo
Posts: 25
Poder: 0
arj2000 Va por buen camino
Como lo hago yo

El otro dia empecé un proyectillo que leia la informacion de una unidad, guardando los datos en una DB (carpetas, ficheros, tamaños, fechas, atributos, etc...).

Pues el TTreeView me daba problemas y encontré una solución bastante rápida:

El tema está en que cuando guardo los datos de las carpetas en la base de datos tengo un campo donde le indico la profundidad de dicha carpeta, y además los guardo por profundidad (C:\, C:\A, C:\A\B, C:\A\B\C, C:\D, ...). Para cargarlos después en un TTreeView hago:

1. Cargo un nombre de carpetas de la DB.
2. Le añado el carácter #9 (tab) tantas veces como profundidad tenga
3. Inserto el nombre modificado en un TListBox
4. Repito desde el 1 hasta que tenga ganas
5. Guardo el TListBox en un fichero temporal (C:\TEMP123.TMP)
6. Cargo el fichero con el TTreeView
7. Elimino el archivo temporal

Va muy bien en serio. Eso si: la base de datos ha de estar ordenada por profundidad para que todo sea correcto.
Responder Con Cita
  #6  
Antiguo 07-06-2004
arj2000 arj2000 is offline
Miembro
 
Registrado: abr 2004
Ubicación: Estocolmo
Posts: 25
Poder: 0
arj2000 Va por buen camino
mini-apunte

Se me olvidaba deciros que para posteriormente desde el TTreeView a la base de datos se debe hacer con el AbsoluteIndex, lo que implica que en la tabla se ha de tener un indice absoluto de todas las filas
Responder Con Cita
  #7  
Antiguo 08-06-2004
hibero hibero is offline
Miembro
 
Registrado: nov 2003
Posts: 104
Poder: 21
hibero Va por buen camino
gracias por vuestras respuestas

gracias por vuestras respuestas. Yo finalmente me lo he solucionado con un TTreeView:
No cargo el arbol de golpe, sino que cargo la parte que me interesa justo cuando hago clic sobre un signo + del arbol, en el evento onexpanding.
Responder Con Cita
  #8  
Antiguo 15-07-2004
didier didier is offline
Miembro
 
Registrado: jul 2003
Ubicación: Santiago, Chile
Posts: 56
Poder: 21
didier Va por buen camino
como cargar una tabla en un tTreeVieu

Adjunto codigo, con cortes de control

chao


procedure Tfrmmaestrochecklist.CargaTrv;
var
tnode, tnode0, tnode1, tnode2 : TTreeNode;

begin

Trv.Items.Clear;

tnode := TtreeNode.Create(Trv.Items);
tnode0 := TtreeNode.Create(Trv.Items);
tnode1 := TtreeNode.Create(Trv.Items);
tnode2 := TtreeNode.Create(Trv.Items);


qry.close;
qry.DatabaseName := gv_basedatos;
qry.RequestLive := false;
qry.sql.Clear;
qry.SQL.Add('select seccion from maestrochecklist ');
qry.SQL.Add('group by seccion order by seccion');
qry.Open;
while not qry.eof do
begin
tnode0 := Trv.Items.Add(tnode,qry.fieldbyname('seccion').asstring);
tnode0.ImageIndex := 0;
tnode0.SelectedIndex := 0;

qry0.close;
qry0.DatabaseName := gv_basedatos;
qry0.RequestLive := false;
qry0.sql.Clear;
qry0.SQL.Add('select item from maestrochecklist ');
qry0.SQL.Add('where seccion = :v_sec ');
qry0.SQL.Add('group by item order by item');
qry0.ParamByName('v_sec').asstring := qry.fieldbyname('seccion').asstring;
qry0.Open;
while not qry0.eof do
begin
tnode1 := Trv.Items.AddChild(tnode0,qry0.fieldbyname('item').asstring);
tnode1.ImageIndex := 1;
tnode1.SelectedIndex := 1;

qry1.close;
qry1.DatabaseName := gv_basedatos;
qry1.RequestLive := false;
qry1.sql.Clear;
qry1.SQL.Add('select subitem from maestrochecklist ');
qry1.SQL.Add('where seccion = :v_sec and item = :v_ite');
qry1.SQL.Add('group by subitem order by subitem');
qry1.ParamByName('v_sec').asstring := qry.fieldbyname('seccion').asstring;
qry1.ParamByName('v_ite').asstring := qry0.fieldbyname('item').asstring;
qry1.Open;
while not qry1.eof do
begin
tnode2 := Trv.Items.AddChild(tnode1,qry1.fieldbyname('subitem').asstring);
tnode2.ImageIndex := 2;
tnode2.SelectedIndex := 2;
qry1.Next;
end;
qry1.close;

qry0.Next;
end;
qry0.close;

qry.Next;
end;
qry.close;


Trv.FullExpand;
Responder Con Cita
  #9  
Antiguo 15-07-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Sólo que de esta forma te cargas todos los registros relacionados de un sólo golpe, lo cual, dependiendo de la cantidad de registros puede tornarse en un proceso sumamente lento.

Lo sugerido anteriormente permite cargar el árbol por etapas solicitando los datos desde la base sólo cuando realmente se desea expandir un nodo.

// Saludos
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 21:49:36.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi