xbrowse tree con setcheck recuperar contenido rama registro

xbrowse tree con setcheck recuperar contenido rama registro

Postby leandro » Thu Mar 03, 2022 2:36 am

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 view  RUN

#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

[ Embarcadero C++ 7.60 for Win32 ] [ FiveWin 23.07 ] [ xHarbour 1.3.0 Intl. (SimpLex) (Build 20230914) ]
User avatar
leandro
 
Posts: 1676
Joined: Wed Oct 26, 2005 2:49 pm
Location: Colombia

Re: xbrowse tree con setcheck recuperar contenido rama registro

Postby leandro » Thu Mar 03, 2022 9:37 pm

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 view  RUN

#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

[ Embarcadero C++ 7.60 for Win32 ] [ FiveWin 23.07 ] [ xHarbour 1.3.0 Intl. (SimpLex) (Build 20230914) ]
User avatar
leandro
 
Posts: 1676
Joined: Wed Oct 26, 2005 2:49 pm
Location: Colombia

Re: xbrowse tree con setcheck recuperar contenido rama registro

Postby Antonio Linares » Fri Mar 04, 2022 10:17 am

Leandro,

muy bien!

gracias por compartirlo
regards, saludos

Antonio Linares
www.fivetechsoft.com
User avatar
Antonio Linares
Site Admin
 
Posts: 42122
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 16 guests