Page 1 of 1

Borrar Items de Treeview

PostPosted: Sun Dec 13, 2015 4:51 am
by cuatecatl82
Saludos a Todos:

Estoy armando un Tree en base al ejemplo re.prg, ya armado un arbol de items como puedo borrar items, he buscado y probado por varias formas pero no funciona, hay alguna forma de poderlo realizar..

Image

Re: Borrar Items de Treeview

PostPosted: Sun Dec 13, 2015 9:29 am
by cnavarro
Victor, seria algo asi, a ver si te sirve

Code: Select all  Expand view


Local nSect
Local nPos
Local oIt    := oTree:GetSelected()
if !Empty( oIt )
   nSect := oTree:GetItemPos( oIt:oParent )
   nPos  := oIt:oParent:GetItemPos( oIt )
   oIt:oParent:aItems[ nPos ]:DeleteBranches()
   oIt:oParent:DelItemPos( nPos )
endif

 

Re: Borrar Items de Treeview

PostPosted: Sun Dec 13, 2015 6:52 pm
by cuatecatl82
Cristóbal:

Como siempre muy oportuna tu ayuda... Funcionó de maravilla


Gracias por tu apoyo. Saludos

Re: Borrar Items de Treeview

PostPosted: Wed Dec 16, 2015 1:51 pm
by Carles
Hi,

Cuidado que en esta clase habia un pequeño bug, no se si esta resuelto ahora. Lo que ocurria creo recordar es que borraba el item pero no la referencia que estaba en su padre. :shock:

Yo tengo el código asi para que funcione correctamente

Code: Select all  Expand view

        //  Buscamos el Padre del que cuelga este Item

            oPadre           :=  oBranch:GetParent()       
           
            TVDeleteItem( ::oTree:hWnd, oBranch:hItem )

        //  TVDeleteItem borra la rama pero NO elimina de la clase el Item de la rama

            nPosHijoenPadre  := Ascan( oPadre:aItems, {|o| o:hItem == oBranch:hItem } )

            IF nPosHijoenPadre > 0

               ADel ( oPadre:aItems, nPosHijoenPadre )
               ASize( oPadre:aItems, Len(oPadre:aItems)-1 )

            ENDIF   


Por si alguien lo necesita o quiere revisar...

Re: Borrar Items de Treeview

PostPosted: Fri Dec 18, 2015 9:09 am
by Silvio.Falconi
Carles,
here run ok but only for subcategory
when I try to delete a category make error
Code: Select all  Expand view

Application
===========
   Path and name: C:\Documents and Settings\Administrator\Desktop\tree\test.Exe (32 bits)
   Size: 2,737,664 bytes
   Compiler version: xHarbour 1.2.3 Intl. (SimpLex) (Build 20140725)
   FiveWin  Version: FWHX 15.01
   Windows version: 5.1, Build 2600 Service Pack 3

   Time from start: 0 hours 1 mins 13 secs
   Error occurred at: 12/18/15, 10:06:55
   Error description: Error BASE/1004  Class: 'NIL' has no exported method: AITEMS
   Args:
     [   1] = U  

Stack Calls
===========
   Called from:  => AITEMS( 0 )
   Called from: test.prg => MABORRA( 244 )
   Called from: test.prg => (b)TEST( 67 )
   Called from: .\source\classes\BUTTON.PRG => TBUTTON:CLICK( 175 )
   Called from: .\source\classes\CONTROL.PRG => TBUTTON:HANDLEEVENT( 1687 )
   Called from: .\source\classes\WINDOW.PRG => _FWH( 3450 )
   Called from:  => SENDMESSAGE( 0 )
   Called from: .\source\classes\DIALOG.PRG => TDIALOG:COMMAND( 403 )
   Called from:  => TWINDOW:HANDLEEVENT( 0 )
   Called from: .\source\classes\DIALOG.PRG => TDIALOG:HANDLEEVENT( 906 )
   Called from:  => DIALOGBOXINDIRECT( 0 )
   Called from: .\source\classes\DIALOG.PRG => TDIALOG:ACTIVATE( 286 )
   Called from: test.prg => TEST( 104 )
 




Code: Select all  Expand view



   local oLink       := oTree:GetSelected()
   local cPrompt     := oLink:cPrompt
   local cCargo      := oLink:Cargo
   local nRecno      := GE->(Recno())
   local lMateria    := ( Len(cCargo) <= 40 )
   local  nNext



SELECT GE
      GE->(DbSkip())
      nNext := GE->(Recno())
      GE->(DbGoto(nRecno))

      GE->(DbDelete())
      GE->(DbPack())
      GE->(DbGoto(nNext))

      IF GE->(EOF()) .or. nNext == nRecno
         GE->(DbGoBottom())
      ENDIF


   // CANCELLO IL TREE
//      oLink:End()   //  <-----------------
       * TvDeleteItem( oTree:hWnd, oLink:hItem )
       * MyDelItem( oTree, oLink )


            //  Buscamos el Padre del que cuelga este Item

                oPadre  :=  oLink:GetParent()
                TVDeleteItem(oTree:hWnd, oLink:hItem )
            //  TVDeleteItem borra la rama pero NO elimina de la clase el Item de la rama
                nPosHijoenPadre  := Ascan( oPadre:aItems, {|o| o:hItem == oLink:hItem } )
                IF nPosHijoenPadre > 0
                   ADel ( oPadre:aItems, nPosHijoenPadre )
                   ASize( oPadre:aItems, Len(oPadre:aItems)-1 )
                ENDIF

             ENDIF

   oTree:refresh()

Re: Borrar Items de Treeview

PostPosted: Tue Nov 23, 2021 10:52 pm
by goosfancito
Veo que tienen mas experiencia en tree que yo.

pueden decirme como puedo recorrerme el tree desde una punta a la otra pasando por todos los OITEM que tnega?

gracias

Re: Borrar Items de Treeview

PostPosted: Wed Nov 24, 2021 4:30 am
by Antonio Linares
Gustavo,

oTree:Scan( bAction )

bAction recibe el parámetro oItem y tiene que devolver un valor lógico indicando si se ha encontrado lo que se buscaba ó hay que seguir buscando :-)

{ | oItem | ..., lEncontrado }

lEncontrado es .T. ó .F.