Yo lo hago de esta manera, recientemente publique un pequeño cambio de la xbrowse para que aceptara una nueva DATA que la llame
lAutoappend
http://forums.fivetechsoft.com/viewtopi ... ght=#66814
pero aqui te dejo un ejemplo que deberia funcionarte, trata de hacer los cambios son muy sencillos, veras la diferencia, por lo menos a mi me funciona, realmente no se los cambios que a sufrido la xbrowse desde la version que usas, espero te sirva, busca una de las DBF ejemplo que tiene esos dos campos "FIRST" y "LAST"
- Code: Select all Expand view
#include "FiveWin.ch"
#include "xbrowse.ch"
function MainTest()
local oWnd, oBrw, oCol
set delete on
USE test
DEFINE WINDOW oWnd
@ 0, 0 XBROWSE oBrw OF oWnd ALIAS "test"
__objAddData( oBrw, "lAutoAppend" )
oBrw:nMarqueeStyle = 3
oBrw:nColDividerStyle = LINESTYLE_BLACK
oBrw:nRowDividerStyle = LINESTYLE_BLACK
oBrw:lHScroll = .T.
oBrw:lColDividerComplete = .T.
oBrw:lAutoAppend = .F.
oBrw:lFastEdit = .T.
oBrw:bPastEof = {|| Dbappend(), oBrw:refresh(), oBrw:aCols[ 1 ]:Edit() }
oBrw:bKeyDown = {|nKey| if( nKey == VK_DELETE ,;
( nLast:=recno(),test->( dbdelete() ), __Dbpack(), dbgoto(nLast) ),), oBrw:refresh() }
oCol = oBrw:AddCol()
oCol:bStrData = { || test->First }
oCol:cHeader = "First"
oCol:nEditType = EDIT_GET
oCol:bOnPostEdit = ;
{ | oCol, xVal, nKey | if( xVal == space( 20 ) .and. nKey == VK_ESCAPE,;
( nLast:=recno(),test->( dbdelete() ), __Dbpack(),dbgoto(nLast-1) ),;// Afirmacion
( If( RecCount() == 0, ( DbAppend(), oBrw:Refresh() ),), ;//Negativa
If( nKey == VK_RETURN, test->First := xVal,) )), oBrw:refresh() }
oCol:bEditValid = {|o| if ( o:value() == space(20), .f., .t.) }
oCol = oBrw:AddCol()
oCol:bStrData = { || test->Last }
oCol:cHeader = "Last"
oCol:nEditType = EDIT_GET
oCol:bOnPostEdit = { | oCol, xVal, nKey | If( RecCount() == 0, DbAppend(),), If( nKey == VK_RETURN, ( test->Last := xVal, oBrw:Refresh() ),) }
oBrw:CreateFromCode()
oWnd:oClient = oBrw
ACTIVATE WINDOW oWnd
return nil