Page 1 of 1

Refrescar Treeview en tiempo de ejecución?

PostPosted: Tue Mar 25, 2008 4:58 am
by leandro
Amigos del foro tengan buen día lo que pasa es que necesito refrescar los niveles de un treeview en tiempo de ejecucción. Saben como lo puedo hacer?

Al mismo tiempo necesito saber como ejecutar una acción al hacer doble clic sobre un item del arbol?

De antemano gracias.

PostPosted: Tue Mar 25, 2008 9:05 am
by Biel EA6DD
1.- La manera de poder cambiar el contenido del tree, es cambiando los tTvItem deseados. Recuerda que el tree es un conteneedor de items.
Lo primero que necesitaras, es saber que item es el que quieres modificar.
Suponiendo que quieres cambiar el item actual, podrias hacerlo de la siguiente manera.
Code: Select all  Expand view
oTree:bChanged := {|o,i| i:=o:GetSelected(),i:SetText('Nuevo caption')}


2.- Esto es más facil, lo que tienes que hacer es definir el codeblock bLDblClick, con lo que quieras que se ejecute al hacer doble click.
Code: Select all  Expand view
oTree:bLDblClick :={||MsgStop('Se ha pulsado doble click')}

Amigo muchas gracias como siempre por responder. ¡

PostPosted: Tue Mar 25, 2008 7:48 pm
by leandro
Amigo como siempre gracias por responder. Pero necesito hacer otra preguntica. Como hago para agregar un nuevo item. En tiempo de ejecucción. Osea cuando agrego un registro a la base de datos. o cuando lo borro como lo quito?

De antemano gracias.

PostPosted: Fri Mar 28, 2008 12:15 pm
by Biel EA6DD
Para añadir un nuevo item por debajo del item que tienes seleccionanado

Code: Select all  Expand view
oTree:GetSelected():Add(cPrompt, nImage, Cargo)

Para borrar, en la version que tengo yo de FW, no tiene para eliminar items individuales, solo tiene para borrar ramas, pero tienes un aporte de Carles Aubia ( http://fivetechsoft.com/forums/viewtopic.php?t=6235), que añadiendo un metodo a la clase tTvItem, permite eliminar items. Puede que las ultimas versiones este metodo ya este incluido, lo desconozco.

La forma de ejeuctarlos
Code: Select all  Expand view
oTree:GetSelected():Delete()
oTree:GetSelected():DeleteBranches()

Gracias..

PostPosted: Fri Mar 28, 2008 1:11 pm
by leandro
Amigo voy a checarlo y cualquier cosa te comento. De nuevo muy agradecido.

PostPosted: Tue Oct 07, 2008 7:27 am
by JmGarcia
Biel EA6DD wrote:2.- Esto es más facil, lo que tienes que hacer es definir el codeblock bLDblClick, con lo que quieras que se ejecute al hacer doble click.
Code: Select all  Expand view
oTree:bLDblClick :={||MsgStop('Se ha pulsado doble click')}

¿ Y como se en que Item he pulsado doble click ?
¿ Como se si es padre o hijo ?

Gracias.

PostPosted: Wed Oct 08, 2008 7:10 am
by JmGarcia
JmGarcia wrote:¿ Y como se en que Item he pulsado doble click ?
Me contesto yo: oTree:getSelText()

JmGarcia wrote:¿ Como se si es padre o hijo ?
Aqui ya tengo problemas.
Si pido oTree:GetSelected():GetParent():cPrompt y oTree:getSelText() estando en un hijo (2º nivel) me da el texto del padre y del hijo.
El problema es cuando estoy en el padre y entonces al buscar a su "padre" (abuelo en este caso) me da un error.

Como el bloque de codigo para doble click es el mismo si pongo esto:
Code: Select all  Expand view
oTree:bLDblClick:={||MsgStop(oTree:GetSelected():GetParent():cPrompt+;
                             oTree:getSelText())}
Cuando estoy en un padre me da Error BASE/1004 Class: 'NIL' has no exported method: CPROMPT

Entonces ¿ Como se en que nivel estoy ?

Por otro lado imaginaros un arbol (tree) que en el primer nivel tiene "nombres" y en el segundo "apellidos" y deseo cambiar el orden.
Como "borro" el tree para cambiar de orden nombre+apellidos o apellidos+orden y refrescarlo. Es decir quiero cambiar todos los datos del tree y repintarlo de nuevo.