¿Cómo busco un item en un TreeView?

Tengo una pregunta ojala puedas responderme a detalle porque recién trabajo con un TreeView, estoy trabajando con PB 5.4 y tengo una ventana que muestra un treeview de la estructura organizacional de mi empresa, a su vez en un DW el usuario ingresa la unidad y el treview deberá expandirse y seleccionar la unidad ingresada. Por favor te agradeceré me des un alcance de como puedo buscar y seleccionar en el treview. Existe alguna propiedad o función que me permita esto, ¿ya qué la búsqueda debo hacerla en todos los nodos a nivel de hermanos e hijos?.

1 respuesta

Respuesta
1
Valla problema.
Seria muy fácil darte el nombre de una función la cual incluyendo el nombre del nodo o su descripción, simplemente sea localizado, sin embargo, esta función no existe dentro del objeto treeview.
La realidad es que hay que construirla,
para ello deberás utilizar funciones como
tv_1. FindItem(RootTreeItem!, 0)
Esta función coloca el puntero en una intentar determinada.
Esta intentar esta determinada por el primer argumento.
Las posibilidades son muchas como para inscribirlas en esta respuesta, sin embargo se encuentran disponibles en la ayuda en linea F1.
Como podrás observar, el primer argumento es RootTreeItem!, esto indica al objeto colocarse en el primer nodo del treeview.
Perdón se me había olvidado, la búsqueda de nodos es secuencial. Y la tienes que hacer con tus propios medios.
Bien
La función finditem() devuelve un valor del tipo numérico, si este es -1 es que ocurrió un error, de lo contrario, devuelve el numero de handle, del nodo.
Para poder interrogar al nodo, utilizaras una función llamada tv_1. GetItem(<handle>, <nodo>)
Igualmente devuelve un valor numérico, -1 si hay error y 1 si todo fue bien.
Los argumentos son 2, el primero es el numero de handle del nodo que necesitas, y el segundo es el resultado de la petición, o sea que en el argumento nodo coloca una instancia del nodo en cuestión.
Ya con esta instancia puedes preguntar por el nombre del nodo, descripción, etc.
Sino cumple con tus condiciones, entones avanzas un nodo, y lo mismo.
Un nodo no es más que un objeto TREEVIEWITEM. El cual contiene las características correspondientes al nodo.
El nodo contiene una propiedad que informa si este contiene otros nodos asociados a el la propiedad es CHILDREN. Entonces si esta propiedad es TRUE, significa que tiene asociados a el otros nodos.
De lo contrario es único.
Con todo esto ya puedes ahora armar una función que busque un nodo.
1- Posicionar el treeview en el primer nodo.
2- Efectuar un ciclo, cargando nodo a nodo, de forma secuencial
3 - extraer el nodo en una instancia del treeviewitem.
4 - preguntar si el nodo en cuestión es el que buscas.
5 - sino es, preguntar si tiene hijos.
6 - efectuar el mismo proceso de localización de nodo.
7 - saltar al siguiente.
8 - si encuentras el nodo abortar la secuencia de búsqueda.
9 - responder según la búsqueda.
Para poder hacer búsquedas dentro de nodos que tengan hijos.
Deberás utilizar la técnica de lectura por recursividad, con este aspecto deberás tener mucho cuidado, pues power builder no tiene un manejo de recursividad muy bueno, regularmente desborda la pila de memoria. (STACK)
Finalizando.
No tengo idea de que esto pueda ser acertado, pero es posible que alguna de las funciones de las pfcs, tengan resuelto este problema, sin embargo personalmente no te recomiendo utilices las pfcs.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas