Resulta que ahora debo llenar un TTreeView con los datos de una tabla, con una profundidad de cuatro ramas...
Es decir:
Sector
|_SubSector
|_Oficina
|_Encargado
Y del encargado, mostrar sus datos en DbEdit's o Edit's. Los "cortes" están definidos perfectamente puesto que en cualquier momento puedo "saber" dónde me encuentro, pero llenar el TTreeView se me ha complicado por que no sé manejarlo.Chapuceramente he diseñado algo así:
[/]
procedure TfrmPrncpl.LlnrArblArs; var tnSuperior, tnPadre, tnHijo, tnNieto, tnGato : TTreeNode; sInsttcn, sDrccnGnrl, sDrccn, sSubDrccn : string; begin TreVewArblArs.Items.Clear; tnSuperior := TreVewArblArs.Items.Add(NIL,'Gobierno del Distrito Federal'); dtamdlDts.ADOQryDts.First; tnPadre := TreVewArblArs.Items.AddChild(tnSuperior,dtamdlDts.ADOQryDts.FieldByName('Ca_area').AsString); sInsttcn := dtamdlDts.ADOQryDts.FieldByName('Ca_institucion').AsString; sDrccnGnrl := dtamdlDts.ADOQryDts.FieldByName('Ca_DirG').AsString; sDrccn := dtamdlDts.ADOQryDts.FieldByName('Ca_Dir').AsString; sSubDrccn := dtamdlDts.ADOQryDts.FieldByName('Ca_Sub').AsString; dtamdlDts.ADOQryDts.Next; while not dtamdlDts.ADOQryDts.Eof do begin if sInsttcn = dtamdlDts.ADOQryDts.FieldByName('Ca_institucion').AsString then begin tnGato := TreVewArblArs.Items.AddChild(tnPadre,dtamdlDts.ADOQryDts.FieldByName('Ca_area').AsString); dtamdlDts.ADOQryDts.Next; end else begin tnPadre := TreVewArblArs.Items.AddChild(tnSuperior,dtamdlDts.ADOQryDts.FieldByName('Ca_area').AsString); sInsttcn := dtamdlDts.ADOQryDts.FieldByName('Ca_institucion').AsString; end; end; dtamdlDts.ADOQryDts.First; TreVewArblArs.FullExpand; end;
[][]
Pero como pueden ver, es demasiado "sucio" como para quedar elegante. Además que no es recursivo ni permite adaptarse a algún cambio en la estructura..., ¿alguna idea que pueda ayudarme? [/][/]