Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 29-05-2019
Fat Fat is offline
Miembro
 
Registrado: jul 2006
Posts: 76
Poder: 18
Fat Va por buen camino
Eliminar hijos de un nodo padre en treeview

Buenas a todos,

Espero puedan ayudarme y gracias por su tiempo.

Mi problema es que lleno un treeview con datos extraídos de una base de datos SQL. Esto lo hago en el evento OnExpanding, hasta ahí todo bien. El problema esta que al contraer y volver a expandir un nodo los datos se vuelven a agregar y así sucesivamente todas las veces que contraiga y expanda ese nodo o cualquier otro que ya haya expandido una vez.

Muchas gracias, un saludo.
Responder Con Cita
  #2  
Antiguo 29-05-2019
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por Fat Ver Mensaje
Esto lo hago en el evento OnExpanding
Puede que tengas que usar otro evento.
Responder Con Cita
  #3  
Antiguo 29-05-2019
Fat Fat is offline
Miembro
 
Registrado: jul 2006
Posts: 76
Poder: 18
Fat Va por buen camino
Lo que pretendo hacer es que cada ves que se expanda el nodo es eliminar los hijos y volverlos a cargar.

Cita:
Puede que tengas que usar otro evento.
No se me ocurre en que otro evento poder cargar los datos al treeview .

Un saludo.
Responder Con Cita
  #4  
Antiguo 29-05-2019
Avatar de look
look look is offline
Miembro
 
Registrado: sep 2007
Ubicación: The Shire
Posts: 656
Poder: 17
look Va camino a la fama
Cita:
Empezado por Fat Ver Mensaje
Buenas a todos,

Espero puedan ayudarme y gracias por su tiempo.

Mi problema es que lleno un treeview con datos extraídos de una base de datos SQL. Esto lo hago en el evento OnExpanding, hasta ahí todo bien. El problema esta que al contraer y volver a expandir un nodo los datos se vuelven a agregar y así sucesivamente todas las veces que contraiga y expanda ese nodo o cualquier otro que ya haya expandido una vez.

Muchas gracias, un saludo.
pon un procedimiento que limpie antes de llenar los datos, y llamalo justo antes de llenar el tree.
__________________
all your base are belong to us
Responder Con Cita
  #5  
Antiguo 29-05-2019
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por look Ver Mensaje
pon un procedimiento que limpie antes de llenar los datos, y llamalo justo antes de llenar el tree.
Responder Con Cita
  #6  
Antiguo 29-05-2019
Fat Fat is offline
Miembro
 
Registrado: jul 2006
Posts: 76
Poder: 18
Fat Va por buen camino
Cita:
pon un procedimiento que limpie antes de llenar los datos, y llamarlo justo antes de llenar el tree.
La ayuda que pido es saber exactamente que poner en ese procedimiento.

Gracias.
Responder Con Cita
  #7  
Antiguo 29-05-2019
WHILENOTEOF WHILENOTEOF is offline
Miembro
 
Registrado: mar 2008
Posts: 229
Poder: 17
WHILENOTEOF Va camino a la fama
Podrías borrar todos los hijos de ese nodo, antes de volver añadir los datos (recorres los hijos de ese nodo-padre y los borras, si tienen objetos asociados al data del nodo, los liberas antes), pero mucho mejor es que una vez que has leído los datos de ese nodo y rellenado los hijos marques un flag para saber que ya están leídos, puedes utilizar alguna propiedad del nodo que no te sirva para otras cosas (por ejemplo ImageIndex, o SelectedImageIndex) y antes de leer los datos en el OnExpanding ves como está la propiedad, si están por leer los añadas y si están leídos no haces nada.
Responder Con Cita
  #8  
Antiguo 29-05-2019
Avatar de look
look look is offline
Miembro
 
Registrado: sep 2007
Ubicación: The Shire
Posts: 656
Poder: 17
look Va camino a la fama
Cita:
Empezado por Fat Ver Mensaje
La ayuda que pido es saber exactamente que poner en ese procedimiento.

Gracias.
Hola amigo, si sabes como llenar el tree no veo problema en vaciarlos, tampoco es necesario hacer un procedure, en fin, algo tan simple como un Tree.Items.Clear; no recuerdo bien.

te recomiendo lo siguiente, crea un procedure que sirva para llenar el tree por completo y no llenarlo segun se expanda por el usuario.
__________________
all your base are belong to us
Responder Con Cita
  #9  
Antiguo 29-05-2019
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por Fat Ver Mensaje
Mi problema es que lleno un treeview con datos extraídos de una base de datos SQL. Esto lo hago en el evento OnExpanding, hasta ahí todo bien. El problema esta que al contraer y volver a expandir un nodo los datos se vuelven a agregar y así sucesivamente todas las veces que contraiga y expanda ese nodo o cualquier otro que ya haya expandido una vez.
¿Por qué no simplemente checas si el nodo tiene hijos? Si ya tiene hijos es que ya los leíste y no hay que volver a hacerlo:

Código Delphi [-]
procedure TForm1.TreeView1Expanding(Sender: TObject; Node: TTreeNode; var AllowExpansion: Boolean);
begin
    if Node.Count = 0 then
    begin
    
        // Lees los hijos
    
    end;
end;

// Saludos
Responder Con Cita
  #10  
Antiguo 29-05-2019
WHILENOTEOF WHILENOTEOF is offline
Miembro
 
Registrado: mar 2008
Posts: 229
Poder: 17
WHILENOTEOF Va camino a la fama
Cita:
Empezado por roman Ver Mensaje
¿Por qué no simplemente checas si el nodo tiene hijos? Si ya tiene hijos es que ya los leíste y no hay que volver a hacerlo:

Código Delphi [-]
procedure TForm1.TreeView1Expanding(Sender: TObject; Node: TTreeNode; var AllowExpansion: Boolean);
begin
    if Node.Count = 0 then
    begin
    
        // Lees los hijos
    
    end;
end;

// Saludos
Si esto fuese stackoverflow, esta sería mi opción correcta. Yo creo que siempre que se pueda hay que optimizar las consultas a la base de datos, y nunca me han gustado ni hacer llamadas para traerlo todo, ni llamar varias veces para traerme los mismos datos con borrados continuos.
Responder Con Cita
  #11  
Antiguo 29-05-2019
Fat Fat is offline
Miembro
 
Registrado: jul 2006
Posts: 76
Poder: 18
Fat Va por buen camino
En muchas ocasiones lo que creemos que es un marrón por resolver la solución es la más simple posible.

Gracias Roman por la idea que al final es la solución que he utilizado y la que creo es la más simple.

solo hacer el apunte de restar -1 ya que sino cuenta el nodo y el conteo siempre es = 1

Código Delphi [-]
if Node.Count - 1 = 0 then

Con el ejemplo de Roma sería

Código Delphi [-]
procedure TForm1.TreeView1Expanding(Sender: TObject; Node: TTreeNode; var AllowExpansion: Boolean);
begin
    if Node.Count = 1 then
    begin
    
        // Lees los hijos
    
    end;
end;

Muchas gracias a todos por su apreciada ayuda.


Un saludo
Responder Con Cita
  #12  
Antiguo 30-05-2019
Avatar de TOPX
TOPX TOPX is offline
Miembro
 
Registrado: may 2008
Ubicación: Bogotá
Posts: 527
Poder: 16
TOPX Va camino a la fama
Cita:
Empezado por WHILENOTEOF Ver Mensaje
stackoverflow

-
__________________
"constructive mind, destructive thoughts"
Responder Con Cita
  #13  
Antiguo 30-05-2019
WHILENOTEOF WHILENOTEOF is offline
Miembro
 
Registrado: mar 2008
Posts: 229
Poder: 17
WHILENOTEOF Va camino a la fama
Cita:
Empezado por TOPX Ver Mensaje

-
Responder Con Cita
  #14  
Antiguo 30-05-2019
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por WHILENOTEOF Ver Mensaje
Si esto fuese stackoverflow, esta sería mi opción correcta. Yo creo que siempre que se pueda hay que optimizar las consultas a la base de datos, y nunca me han gustado ni hacer llamadas para traerlo todo, ni llamar varias veces para traerme los mismos datos con borrados continuos.
El problema es que, como casi siempre, tenemos que adivinar, pues no sabemos realmente la finalidad de leer esos datos, si tiene que recargarlos cada x tiempo por si hay cambios, etc. Así que las respuestas son normalmente "adivinatorias".

Si de primera hora nos dice que solamente quiere leer esos datos y que no los lea más, entonces las respuestas hubiesen sido otras. Por ejemplo, la de Román.
Responder Con Cita
  #15  
Antiguo 30-05-2019
WHILENOTEOF WHILENOTEOF is offline
Miembro
 
Registrado: mar 2008
Posts: 229
Poder: 17
WHILENOTEOF Va camino a la fama
Cita:
Empezado por Casimiro Notevi Ver Mensaje
El problema es que, como casi siempre, tenemos que adivinar, pues no sabemos realmente la finalidad de leer esos datos, si tiene que recargarlos cada x tiempo por si hay cambios, etc. Así que las respuestas son normalmente "adivinatorias".

Si de primera hora nos dice que solamente quiere leer esos datos y que no los lea más, entonces las respuestas hubiesen sido otras. Por ejemplo, la de Román.

Completamente de acuerdo.
Responder Con Cita
  #16  
Antiguo 30-05-2019
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
En realidad, yo no entendí el comentario de stackoverflow

// Saludos
Responder Con Cita
  #17  
Antiguo 30-05-2019
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por roman Ver Mensaje
En realidad, yo no entendí el comentario de stackoverflow
// Saludos
Ese no lo entendió nadie
Responder Con Cita
  #18  
Antiguo 30-05-2019
WHILENOTEOF WHILENOTEOF is offline
Miembro
 
Registrado: mar 2008
Posts: 229
Poder: 17
WHILENOTEOF Va camino a la fama
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Ese no lo entendió nadie

Yo tampoco lo entendí . Bueno me refería que creo que en stackoverflow uno marca la respuesta que cree más adecuada, y decía que en esta caso para mí sería la respuesta de Román.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Consulta - TP Arboles- "Para cada nodo de un arbol Indique nombre del nodo padre" velapuerca88 Varios 5 08-06-2012 18:35:33
Saber el nombre del nodo padre, en un TreeView jazmin OOP 7 12-03-2010 16:53:25
Insertar nodo padre en TreeView PaFernan99 OOP 2 29-01-2008 15:50:48
Nodo padre sin hijos en TTreeView jorgesl OOP 3 10-04-2006 21:24:11
Formulario padre con hijos oscarsanta Conexión con bases de datos 2 31-01-2006 14:17:13


La franja horaria es GMT +2. Ahora son las 23:22:50.


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