PDA

Ver la Versión Completa : VirtualTreeView de tres niveles... solo consigo dos :(


tgsistemas
26-03-2010, 11:49:26
Hola a tod@s,

he estado leyendo varios hilos sobre ese componente (VirtualTreeView), me parece muy bueno y con muchas posibilidades pero estoy atascado en una tonteria que no consigo resolver.

Basándome en la idea de este hilo sobre treeview y tablas master/detail (http://www.clubdelphi.com/foros/showthread.php?t=45264&highlight=virtualtreeview) lo he adaptado con 3 qry (zeos read only) relacionados entre sí (MasterSource, MasterField, LinkedFields) y consigo cargar los primeros qry's pero estoy atascado en cargar el 3 nivel.... No me queda nada claro el tema de los nodos, items, etc...

el código adaptado es :

procedure TFPruebas.vrtlstrngtr1InitNode(Sender: TBaseVirtualTree;
ParentNode, Node: PVirtualNode;
var InitialStates: TVirtualNodeInitStates);
var data:PMyData;
begin
data := Sender.GetNodeData(Node);
if Sender.GetNodeLevel(Node) = 0 then
begin
// Nodo maestro - DC
zroqryDC.RecNo := node.Index + 1;
data.inomdcmrcial := zroqryDC.fieldbyname('nomdcmrcial').asString;
data.icoddcmrcial := zroqryDC.fieldbyname('coddcmrcial').AsInteger;
if zroqryAM.RecordCount>0 then InitialStates:=InitialStates+[ivsHasChildren];
end else
begin
// Nodo Detalle - AM
zroqryDC.RecNo := parentnode.Index + 1;
zroqryAM.RecNo := Node.Index + 1;
//aqui faltaria añadir el 3 nivel (se llama TDAS) pero se cómo indicarle que son lineas de AM :confused:
data.inomdcmrcial := zroqryDC.fieldbyname('nomdcmrcial').asString;
data.icoddcmrcial := zroqryDC.fieldbyname('coddcmrcial').AsInteger;
data.inommnger := zroqryAM.fieldbyname('nommnger').AsString;
data.icodmnger := zroqryAM.fieldbyname('codmnger').AsInteger;
data.inmbre := zroqryTDAS.fieldbyname('nmbre').AsString;
data.icom := zroqryTDAS.fieldbyname('com').AsInteger;
end;
end;


procedure TFPruebas.vrtlstrngtr1Change(Sender: TBaseVirtualTree;
Node: PVirtualNode);
begin
// los 3 grids actualizan los datos correctamente al cambiar en el treeview
if bAutoLocate and assigned(node) then
begin
if sender.GetNodeLevel(node) = 0 then
zroqryDC.RecNo:=node.Index+1
else begin
zroqryDC.RecNo:=node.parent.Index+1;
zroqryAM.RecNo:=node.Index+1;
end;
end;
end;

alguien podría mostrarme un poco de luz por favor?? estoy muy, pero muy espeso :confused:

saludos y gracias a tod@s