xbrowse tree con setcheck recuperar contenido rama registro

Post Reply
User avatar
leandro
Posts: 1744
Joined: Wed Oct 26, 2005 2:49 pm
Location: Colombia
Has thanked: 34 times
Been thanked: 10 times
Contact:

xbrowse tree con setcheck recuperar contenido rama registro

Post by leandro »

Hola buenas noches para todos

Estoy intentando crear un tree desde la base de datos, para luego mostrarla en un xbrowse, recuperar la información y actualizar el estado al momento de hacer doble click sobre el setcheck, tanto el en xbrowse como en la base de datos.

Tome este ejemplo, pero no se como hacer para recuperar el valor de la rama del tree (o registro de xbrowse) al momento de hacer doble click, para luego proceder a hacer la actualización en la base de datos refrescar el xbrowse.

Vaya si es difícil esto de los tree :shock:

Code: Select all | Expand


#include "fivewin.ch"

function Main()

   local oCn, oRs, oTree, tmp
   local oDlg, oBrw

    Local cbCambioEstado := <|x,oBrw,n|
            oRs:Fields( "married" ):value := if(x,.T.,.F.)
            oRs:Update()
            oBrw:refresh()
            return nil
        >

   oCn   := FW_OpenAdoConnection( "xbrtest.mdb" )
   if oCn == nil
      return nil
   endif
   oRs   := FW_OpenRecordSet( oCn, "SELECT * FROM CUSTOMER ORDER BY STATE,CITY,FIRST" )

   oRs:MoveFirst()
   TREE oTree
      do while !oRs:Eof()
         TREEITEM oRs:Fields( "state" ):Value ;
            CARGO { uValBlank( oRs:Fields( "first" ):Value ), uValBlank( oRs:Fields( "salary" ):Value ),;
                    , uValBlank( oRs:Fields( "married" ):Value )}
         tmp := oRs:Fields( "state" ):Value
         TREE
         do while !oRs:Eof() .and. oRs:Fields( "state" ):Value == tmp
            TREEITEM oRs:Fields( "city" ):Value CARGO { oRs:Fields( "first" ):Value, oRs:Fields( "salary" ):Value,;
                , uValBlank( oRs:Fields( "married" ):Value ) }
            oRs:MoveNext()
         enddo
         ENDTREE
      enddo
   ENDTREE
   oRs:MoveFirst()
   oTree:OpenAll()
   

   DEFINE DIALOG oDlg SIZE 550,600 PIXEL TRUEPIXEL
   @ 20,20 XBROWSE oBrw SIZE -20,-20 PIXEL OF oDlg ;
      DATASOURCE oTree COLUMNS 1, 2, 3 ;
      HEADERS "STATE>CITY", "FIRST", "SALARY","MARRIED" ;
      CELL LINES NOBORDER
   
    WITH OBJECT oBrw
      :bLDblClick   := {|nRow, nCol| msginfo(oBrw:nArrayAt) } //Como recupero los valores del registro?
    END

    WITH OBJECT oBrw
      :aCols[4]:bEditValue := {|| IF( oRsPrm:Fields("married"):Value == .T. , .T. , .F. )}
      :aCols[4]:cDataType  := "L"
      :aCols[4]:nEditType := EDIT_GET
      :aCols[4]:SetCheck()
      :aCols[4]:bOnPostEdit    := { | o, x, n | EVAL(cbCambioEstado,x,oBrw,n) }      
    END  
     

   oBrw:lDisplayZeros := .t.
   oBrw:CreateFromCode()

   ACTIVATE DIALOG oDlg CENTERED

return nil
 


Image
Saludos
LEANDRO AREVALO
Bogotá (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com

[ Turbo Incremental Link64 6.98 Embarcadero 7.70 ] [ FiveWin 24.09 ] [ xHarbour 64 bits) ]
User avatar
leandro
Posts: 1744
Joined: Wed Oct 26, 2005 2:49 pm
Location: Colombia
Has thanked: 34 times
Been thanked: 10 times
Contact:

Re: xbrowse tree con setcheck recuperar contenido rama registro

Post by leandro »

Bueno ya lo hice funcionar, aun que no he comprendido del todo como funciona, sobre todo el setcheck() y la posición de la columna del CARGO dentro del oTree :shock:

Seguiré estudiando y publicare los avances, siempre es complejo el manejo de estos tree

Image

Code: Select all | Expand


#include "fivewin.ch"

function Main()

   local aData, oTree
   local oDlg, oFont, oBrw

    Local cbCambioEstado := <|x|
            oBrw:oTreeItem:Cargo[2] := x
            oBrw:refresh()
        >

   aData    := ;
   {  { "Facturas", 00,.T.  } ;
   ,  { "Pedidos", 00,.F. } ;
   ,  { "Remsiones", 00,.F. } ;
   ,  { "Notas", 02,.F. } ;
   }

   aData2    := ;
   {  { "Agregar ", 01,.T. } ;
   ,  { "Modificar ", 02,.T. } ;
   }

   
    TREE oTree
    FOR r:=1 TO len(aData)
        TREEITEM aData[r][1] CARGO {  aData[r][2] , aData[r][3]  }     
        TREE
        FOR t:=1 TO len(aData2)
            TREEITEM aData2[t][1] CARGO { aData2[t][2] , aData2[t][3]  }
        NEXT  
        ENDTREE
    NEXT   
    ENDTREE

   DEFINE FONT oFont NAME "TAHOMA" SIZE 0,-15
   DEFINE DIALOG oDlg SIZE 450,400 PIXEL TRUEPIXEL FONT oFont

   @ 20,20 XBROWSE oBrw SIZE -20,-20 PIXEL OF oDlg ;
      DATASOURCE oTree ;
      COLUMNS 2 ;
      HEADERS "ITEM", "AUTO";
      CELL LINES NOBORDER

   WITH OBJECT oBrw
      :lDisplayZeros := .f.
        :aCols[ 1 ]:AddBitmap( { FWDArrow(), FWRArrow(), GetTreeBmps()[ 2 ] } )
       
        :aCols[2]:bEditValue := {|| oBrw:oTreeItem:Cargo[2] }
        :aCols[2]:cDataType  := "L"
        :aCols[2]:nEditType := EDIT_GET
        :aCols[2]:SetCheck()
        :aCols[2]:bOnPostEdit    := { | o, x, n | EVAL(cbCambioEstado,x) }     

        :bClrStd := { || { CLR_BLACK, If( oBrw:oTreeItem:nLevel == 1, CLR_YELLOW, CLR_WHITE ) } }
     
        :CreateFromCode()
   END
    oTree:OpenAll()

   ACTIVATE DIALOG oDlg CENTERED
   RELEASE FONT oFont

return nil

 
 
Saludos
LEANDRO AREVALO
Bogotá (Colombia)
https://hymlyma.com
https://hymplus.com/
leandroalfonso111@gmail.com
leandroalfonso111@hotmail.com

[ Turbo Incremental Link64 6.98 Embarcadero 7.70 ] [ FiveWin 24.09 ] [ xHarbour 64 bits) ]
User avatar
Antonio Linares
Site Admin
Posts: 42513
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Has thanked: 31 times
Been thanked: 73 times
Contact:

Re: xbrowse tree con setcheck recuperar contenido rama registro

Post by Antonio Linares »

Leandro,

muy bien!

gracias por compartirlo
regards, saludos

Antonio Linares
www.fivetechsoft.com
Post Reply