Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-09-2022
bucanero bucanero is offline
Miembro
 
Registrado: nov 2013
Ubicación: Almería, España
Posts: 208
Poder: 11
bucanero Va camino a la fama
hola!,
intentalo con esta rutina

Código:
uses 
  System.Generics.Collections;

...

procedure LoadTreeViewFromDataset(TreeView: TTreeView; dataset: TDataSet);
var
  id, parent_id: integer;
  nombre: string;
  parentNode, TreeNode: TTreeNode;
begin
  /// genera una lista temporal de indices para acceder a los nodos por su ID
  with Tdictionary<Integer, TTreeNode>.create do
  try
    dataset.First;
    while not dataset.Eof do begin
      /// -- Aqui lee los datos de la tabla del nodo que se va a crear
      id := dataset.FieldByName('id').AsInteger;
      parent_id := dataset.FieldByName('parent_id').Value;
      nombre := dataset.FieldByName('nombre').Value;
      /// ---

      // comprueba si existe el nodo padre
      if not TryGetValue(parent_id, parentNode) then
        parentNode := nil;

      // genera el nuevo nodo
      TreeNode := TreeView.Items.AddChild(parentNode, nombre);
      // inserta un puntero al id de la tabla, por si mas tarde se desea localizar el registro nuevamente
      TreeNode.Data := pointer(id);

      // lo inserta en la lista de indices
      AddOrSetValue(id, TreeNode);
      dataset.next;
    end;
  finally
    /// Libera la lista de indices
    free;
  end;
end;

procedure TForm2.ButtonLeerTreeViewClick(Sender: TObject);
begin
  try
    TreeView1.Items.BeginUpdate;
    FDQuery1.disableControls;
    if not FDQuery1.active then
      FDQuery1.open;
    LoadTreeViewFromDataset(TreeView1, FDQuery1);
  finally
    FDQuery1.close;
    FDQuery1.enableControls;
    TreeView1.Items.endUpdate;
  end;
end;
IMPORTANTE: para no tener problemas con la lectura del arbol desde una consulta SQL es necesario que los resultados se muestren ordenados por el campo padre, ID.

EJEMPLO:
Código SQL [-]
SELECT id, parent_id, nombre
  FROM tabla_arbol
 WHERE id >= parent_id
ORDER BY parent_id, id
Responder Con Cita
  #2  
Antiguo 05-12-2022
Diego200519 Diego200519 is offline
Registrado
 
Registrado: sep 2022
Posts: 5
Poder: 0
Diego200519 Va por buen camino
Buenos días bucanero, me complace decirte que la solución que me has propuesto me funciono , lamento no haber visto tu respuesta antes, pero si, efectivamente es lo que estaba buscando, mil gracias
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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Llenar TreeView desde una tabla mRoman OOP 12 02-06-2020 13:19:01
Cargar dbcombobox desde una tabla en mysql asdberna Conexión con bases de datos 4 05-04-2013 20:43:06
Cargar TActionManager desde TreeView Neeruu Varios 5 04-03-2010 17:47:58
¿Como guardar una tabla desde el componente shell treeview? krlox31416 Varios 9 29-09-2008 02:46:23
Cargar un TTreeView desde una tabla hibero OOP 8 15-07-2004 19:43:33


La franja horaria es GMT +2. Ahora son las 23:02:15.


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