RE:Busqueda en TeeView
Publicado por
mike (1 intervención) el 07/10/2007 01:56:03
seria muy facil darte el nombre de una funcion la cual incluyendo el nombre del nodo o su descripcion, simplemente sea localizado, sin embargo, esta funcion no existe dentro del objeto treeview.
la realidad es que hay que construirla,
para ello deberas utilizar funciones como
tv_1.FindItem(RootTreeItem!, 0)
esta funcion coloca el puntero en una posicion determinada.
esta posicion 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 podras observar, el primer argumento es RootTreeItem!, esto indica al objeto colocarse en el primer nodo del treeview.
perdon se me habia olvidado, la busqueda de nodos es secuencial. y la tienes que hacer con tus propios medios.
bien
la funcion finditem() devuelve un valor del tipo numerico, si este es -1 es que ocurrio un error, de lo contrario, devuelve el numero de handle, del nodo.
para poder interrogar al nodo, utilizaras una funcion llamada tv_1.GetItem(<handle>, <nodo>)
igualmente devuelve un valor numerico, -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 peticion, o sea que en el argumento nodo coloca una instancia del nodo en cuestion.
ya con esta instancia puedes preguntar por el nombre del nodo, descripcion, etc.
sino cumple con tus condiciones, entones avanzas un nodo, y lo mismo.
un nodo no es mas que un objeto TREEVIEWITEM. el cual contiene las caracteristicas 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 unico.
con todo esto ya puedes ahora armar una funcion 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 cuestion es el que buscas.
5 - sino es, preguntar si tiene hijos.
6 - efectuar el mismo proceso de localizacion de nodo.
7 - saltar al siguiente.
8 - si encuentras el nodo abortar la secuencia de busqueda.
9 - responder segun la busqueda.
para poder hacer busquedas dentro de nodos que tengan hijos.
deberás utilizar la tecnica 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.
espero esto pueda ser de utilidad para resolver tu problema
saludos