PDA

Ver la Versión Completa : TreeView... Como hago esto?


b3nshi
07-08-2007, 01:35:42
Les explico, tengo un tree view con estos items...

lunes
>>|mañana
>>>>>|actividad
>>|tarde
>>>>>|actividad
martes
>>|mañana
>>>>>|actividad1
>>>>>|actividad2
>>>>>|actividad3
>>|tarde
>>>>>|actividad
miercoles
>>|mañana
>>>>>|actividad1
>>>>>|actividad2
>>|tarde
>>>>>|actividad1
>>>>>|actividad2
>>>>>|actividad3
>>>>>|actividad4

Siendo actividad los items q pueden variar... o sea... pueden haber una o varias actividades...

Y bueno lo q estoy intentando hacer es guardarlas en un archivo xml...
el problema surge cuando tengo q reccorrer los items y subitems... lo estoy haciendo de la siguiente manera:

for i:= 0 to treeview1.items.count do //Para recorrer los dias
begin
for j:= 0 to treeview1.items[i].items.count do //Para ver si es mañana o tarde
begin
for y := 0 to treeview1.items[i].items[j].items.count do //Recorro las actividades
begin

end;
end;
end;


Pero resulta q haciendo de esta forma nunca llega a recorrer los otros dias... o sea... no llega al martes ni nada de eso por lo q supongo q estoy moviendome mal entre los items y subitems...

Alguien sabe como puedo moverme en el treeview? Es decir como deberian ser los "for"

Desde ya muchas gracias

{Saludos}

Caro
07-08-2007, 04:38:19
Hola, yo recorro con un solo for, y segun alguna condición hago lo que necesito.


for Ind:=0 to TreeView1.Items.Count-1 do
begin
case TreeView1.Items[Ind].Level of
0://Nivel 0 (Dias)
1://Nivel 1 (Turno)
2://Nivel 2 (Actividades)
end;
end;



Saluditos, espero te sirva

roman
07-08-2007, 06:30:32
Hola,

El método que describe Caro puede ser más que suficiente y es muy sencillo. Aún así, dado que un archivo XML también es jerárquico, pudiera ser que te convenga más recorrer el árbol recursivamente:

1. Lees los nodos de primer nivel (días)
2. Por cada día, lees sus subnodos (turnos)
3. Por cada turno, lees sus subnodos (actividades)

Más o menos sería así:


var
NodoDia: TTreeNode;

begin
// Te colocas en el primer nodo del árbol
NodoDia := TreeView1.Items.GetFirstNode();

// Recorres los nodos de primer nivel (días)
while Assigned(NodoDia) do
begin
(*
Aquí trabajas con este día
*)

// Lees los turnos de este nodo
LeerTurnos(NodoDia);

// Avanzas al siguiente nodo del mismo nivel (dia)
NodoDia := NodoDia.GetNextSibling();
end;
end;


El método LeerTurnos trabaja con los subnodos del nodo (dia) que se le pase:


procedure LeerTurnos(NodoDia: TTreeNode);
var
NodoTurno: TTreeNode;

begin
// Te colocas en el primer subnodo (turno) de este dia
NodoTurno := NodoDia.GetFirstChild();

// Recorres los subnodos (turnos) de NodoDia
while Assigned(NodoTurno) do
begin
(*
Aquí trabajas con este turno
*)

// Lees las actividades de este nodo
LeerActividades(NodoTurno);

// Avanzas al siguiente nodo del mismo nivel (turno)
NodoTurno:= NodoTurno.GetNextSibling();
end;
end;


Finalmente, el método LeerActividades, trabaja con los subnodos del nodo (turno) que se le pase:


procedure LeerActividades(NodoTurno: TTreeNode);
var
NodoActividad: TTreeNode;

begin
// Te colocas en el primer subnodo (actividad) de este turno
NodoActividad := NodoTurno.GetFirstChild();

// Recorres los subnodos (actividades) de NodoTurno
while Assigned(NodoActividad) do
begin
(*
Aquí trabajas con esta actividad
*)

// Avanzas al siguiente nodo del mismo nivel (actividad)
NodoActividad:= NodoActividad.GetNextSibling();
end;
end;


// Saludos

b3nshi
07-08-2007, 15:53:17
Muchisimas Gracias a los dos por contestarme... en realidad creo q los dos metodos me ayudan para guardar en el archivo xml, uno con mas lineas de codigo q otro... pero en fin... muchisimas gracias a los dos... ya probé usando ambos y funcionan perfectos!...

Hasta la proxima!

{Saludos}

b3nshi
08-08-2007, 18:29:17
Y ahora... una pregunta? Como hago para leer este xml?
Estuve viendo un poco de codigo pero muy claro no me queda...
No hay un items.count para los nodos dentro d un xml por loq no se como controlar esto...

Como haria para leer un archivo con la estructura como la que tengo arriba?

Muchas Gracias nuevamente!

{Saludos}