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

 
 
Herramientas Buscar en Tema Desplegado
  #4  
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
 



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 03:53:34.


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