Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 2
Ir a la página 1, 2  Siguiente
 
El Control TreeView
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje El Control TreeView 
 
El control treeview muestra en forma esquemática (arbol) un conjunto de elementos llamados items seleccionables. Cada uno de ellos tiene un texto y un icono y están organizados por una clave que se llama key y que es la que permite expandir o colapsar zonas.

El control TreeView tiene DOS punteros.

1. El puntero obtenido al desplazarse con el ratón o el teclado. Este puntero es el puntero físico porque es donde físicamente estamos situados. A él se llega mediante la propiedad CURRENT
2. El puntero obtenido al desplazarse para obtener información de otros nodos. Este puntero es el puntero lógico. A él se llega mediante la propiedad ITEM

Obtener información de nodos
tree.current.text ---> devuelve el texto del item en el que estamos actualmente.
                                  El cursor lógico y el cursor físico coinciden
tree.moveparent ---> situa el cursor lógico en el item padre.
tree.item.text ---> devuelve el texto del item padre. El cursor físico sigue en el mismo sitio por eso tree.current.text sigue dando el mismo resultado que antes.

Los métodos Moveparent, movefirst, movelast, movenext, moveprevious, moveto(key) mueven el cursor lógico a partir del item físico en el que estemos situados. Es decir, sobre un item en el que nos hemos posicionado con el teclado o el ratón podemos utilizar los moves para movernos a otro item y obtener información de él. Esa información estará disponible en la propiedad ITEM.

Creación del treeview
Dim Tree as treeview
Tree=new Treeview


Creación de items
el argumento genérico es
tree.add(clave,texto, imagen,padre)
la clave es la key que permite ampliar o colapsar zonas.
Texto es el mensaje que se mostrará.
Imagen es el icono que tendrá ese item (no requerido)
Padre es el nodo del que depende.

Creación de la primera zona global
Tree.add("Zonas","Zonas")

Creación de un nodo hijo de Zonas
Tree.add(Pais,"España","Zonas")

Creación de un item hijo de España
Tree.add(Comunidad,"Madrid","España")

Ejemplo
Recorrer una tabla en la que hay campos pais, comunidad,region,provincia, ciudad e ir creando nodos en un treeview dinámicamente.

Se suponde un recordset ya abierto con acceso a esos campos llamado Rec y unas variables pais, comunidad, region, provincia,ciudad de tipo string creadas.
El recorset tiene los datos procedentes de "select * from ubicaciones order by Pais,Region,Provincia,Ciudad"

Tree.add("Zonas","Zonas")
Do while Rec.Available
   Pais=Rec!Pais
   Tree.add(Pais,Pais,,"Zonas")
   do while Pais=Rec!Pais
      Region=Rec!Region
      Tree.add("Region","Region",,"Pais")
      Do while Region=Rec!Region
         Provincia=Rec!Provincia
         Tree.add("Provincia","Provincia",,"Region")
         Do while Provincia=Rec!Provincia
            Ciudad=Rec!Ciudad
            Tree.add("Ciudad","Ciudad",,"Provincia")
            Rec.Movenext
            If not Rec.Available then break
         Loop
       if not Rec.Available then break
       loop
   if not Rec.Available then break
   loop
loop


Como resultado tendremos un treeview con todos los paises, regiones, provincias y ciudades presentes en la tabla.

Al pinchar en un elemento del tree queremos obtener todos los elementos de la tabla que tienen esa característica. Por ejemplo si pinchamos en España será que queremos todos los registros de pais="España". Si pinchamos en "Andalucia" será que queremos todos los registros de region="Andalucia" y si pinchamos en "Sevilla" será que queremos todos los registros de ciudad="Sevilla"

Tree.current.key ---> devuelve la clave del item actual
tree.item.key ----> devuelve la clave del item en el que está posicionado el cursor lógico.

select case tree.current.key
   case "Pais"
      Sql="select * from ubicaciones where Pais='" & tree.current.text & "'"
   case "Region"
      Sql="select * from ubicaciones where Region='" & tree.current.text & "'"
   case "Ciudad"
      Sql="select * from ubicaciones where Ciudad='" & tree.current.text & "'"
end select


Con esa Sql ahora volcaríamos los resultados en un dataview o donde fuera.

Ahora bien, nos damos cuenta que puede haber ciudades con el mismo nombre en paises distintos. Para resolver el error necesitamos que la Sql extraiga pais y ciudad.

select case tree.current.key
   case "Pais"
      Sql="select * from ubicaciones where Pais='" & tree.current.text & "'"
   case "Region"
      Sql="select * from ubicaciones where Region='" & tree.current.text & "'"
   case "Ciudad"
      Tree.moveparent ---> nos situamos en el item padre del seleccionado
      Padre=Tree.item.text
      Tree.moveparent ----> nos situamos en el abuelo
      Abuelo=Tree.item.text
      Sql="Select * from ubicaciones where Pais='" & Abuelo & "' and Region='" & Padre & "' and ciudad='" & Tree.current.text & "'"
end select

 



 
soplo - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: El Control TreeView 
 
solo una preguntilla, para expander todos los items que tengan subhijos? la propiedad expand por alguna razon no me funciona :/ (quizas esté utilizandola mal)
 



 
CanihoJR - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: El Control TreeView 
 
Creo que te estás liando.
Hay una propiedad Treeview.expand que no es para expandir ramas como tu quieres. Esa propiedad lo que hace es modificar el tamaño del objeto treeview si está incluído en un contenedor que tenga activa la propiedad arrange.

Es decir que tu pintas un treeview, pero este se adaptará al tamaño del contenedor si el usuario aumenta o reduce su tamaño. No tiene nada que ver con expandir o colapsarramas. Para probarlo pon un treeview en un frame, pon a este arrange y al ejecutar verás como se adapta el treeview a la forma que le hayas dado al frame según el arrange que hayas puesto.

La propiedad que buscas no es una propiedad del treeview. Es una propiedad de treeviewitem es decir de las ramas. Accedes a esa propiedad mediante ITEM.

Treeview.item.expand=true si que expandirá la rama donde esté el cursor lógico y al hacerlo se ejecutará el evento expand del treeview.

Cuando quieras cerrar pones treeview.item.expand a false y colapsarás la rama donde esté el cursor lógico y al hacerlo se ejecutará el evento collapse del treeview.

Un saludo
 



 
soplo - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: El Control TreeView 
 
Pues como siempre, nunca me vá a la primera..... ni despues de 200 modificaciones mas, por lo que siempre me hace falta algun dato extra mas... xDDD

'Añado categoria principal del treeview
  a.Add("Principal", "Principal")
  'añado los registros al arbol
  DO WHILE resultado.Available
    IF resultado["padre"] = "" THEN
      a.Add(resultado["nombre"], resultado["nombre"])
      a.item.expand = TRUE
    ELSE
      a.Add(resultado["nombre"], resultado["nombre"],, resultado["padre"])
    ENDIF
    'Pasamos a la siguiente fila del Objeto Result
    resultado.MoveNext()
  LOOP


Ese es mi codigo, se ejecuta sin problemas, peeeeeero no me expande los items padre :/ alguna tonteria por ahi que se me olvide? :/
 



 
CanihoJR - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: El Control TreeView 
 
Corríjeme si me equivoco, pero es que me da la impresión de que si se expande, solo que como no hay ramas hijas no hay nada que mostrar.

Al menos es lo que parece

 
 



 
soplo - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: El Control TreeView 
 
ahora me suelta un error:

"Unknown symbol 'expand' in class 'treeviewItem'" ??? :s
 



 
CanihoJR - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: El Control TreeView 
 
Es que la propiedad es expanded

Me lié entre el evento expand y la propiedad expanded

 
 



 
soplo - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: El Control TreeView 
 
ahora lo deje asi:

'Añado categoria principal del treeview
  a.Add("Principal", "Principal")
  a.item.Expanded = TRUE
  'añado los registros al arbol
  DO WHILE resultado.Available
    IF resultado["padre"] = "" THEN
      a.Add(resultado["nombre"], resultado["nombre"])
      a.item.Expanded = TRUE
    ELSE
      a.Add(resultado["nombre"], resultado["nombre"],, resultado["padre"])
      a.item.Expanded = TRUE
    ENDIF
    'Pasamos a la siguiente fila del Objeto Result
    resultado.MoveNext()
  LOOP
END

y ahora almenos no dá ningun error, pero tampoco expande o_O
 



 
CanihoJR - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: El Control TreeView 
 
Tengo que probar esto, que ahora no estoy seguro, pero que yo recuerde al hacer un add no cambias el cursor lógico. Osea que si haces un add y luego un expanded no estás expandiendo en nuevo sino el de donde estabas. Luego añades otro y otro expanded que en realidad vuelves a expandir el mismo de antes.

Lo pruebo esta tarde y te confirmo
 



 
soplo - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: El Control TreeView 
 
Entonces si mal no te he entendido, tendria que, Añadir, seleccionar y expandir, no? probaré asi, si consigo algo posteo ^^
 



 
CanihoJR - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
Ocultar¡Este tema fue útil?

 

Elegir valoración:                       

Media de valoración Valoración mínima Valoración máxima Número de valoraciones
0.00 0 0 0
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Selecciones En Un TreeView [solucionado] shordi General 2 Jueves, 11 Abril 2013, 13:58 Ver último mensaje
Shell
No hay nuevos mensajes Cuestión Sobre El TreeView shordi General 3 Lunes, 02 Junio 2014, 09:53 Ver último mensaje
shordi
No hay nuevos mensajes ArbolBiblia (clase Heredada De TreeView) v3ctor Controles/Librerías/Componentes 0 Viernes, 04 Enero 2019, 00:04 Ver último mensaje
v3ctor
No hay nuevos mensajes Recorrer Y Reposicionar Un TreeView [SOLUC... shordi Controles/Librerías/Componentes 10 Martes, 01 Abril 2014, 09:53 Ver último mensaje
shordi
 

Publicar nuevo tema  Responder al tema  Página 1 de 2
Ir a la página 1, 2  Siguiente

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede publicar eventos en el calendario