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
- Code: Select all Expand view
#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