Xbrowse - EDIT_LISTBOX

Xbrowse - EDIT_LISTBOX

Postby rterraz » Fri Feb 10, 2017 8:02 pm

Hola amigos
A ver si alguno de ustedes me puede ayudar he probado de todo y no encuentro la solucion...
El problema es el siguiente: En en xbrowse tengo una columna que se edita con un EDIT_LISTBOX que contiene un array (aList) de mas de 1000 elementos.
Necesito, a partir de la ubicacion que tengo en el :aEditListTxt cuando selecciono un elemento ubicarme en otro array (aValores) que contiene datos complementarios del aList.
Esto es muy facil dentro del xbrowse usando :nArrayAt o en un listbox usando oLbx:nAt aqui en el :bOnPostedit de la columna probe o:aEditListTxt:nAt y o:aEditListTxt:nArrayAt y no funcionan. Tampoco funciona o:oEditLbx:aEditListTxt:nAt etc.etc.
Tengo resuelto el problema usando el valor pasado al :bOnpostedit para hacer un ASCAN en el segundo array
ej: :bOnPostedit:={|o,x,n| nPos:=ASCAN( o:aEditListTxt,{|ele| ele[1]=x } ) ,;
nVal:= aValores[npos,2] ....

Esto funciona pero creo que debe haber una forma mas moderna de hacerlo desde el mismo xbrowse
Espero no haberlos cansado, muchas gracias.
User avatar
rterraz
 
Posts: 182
Joined: Wed Nov 08, 2006 11:44 pm
Location: Argentina

Re: Xbrowse - EDIT_LISTBOX

Postby nageswaragunupudi » Sun Feb 12, 2017 6:20 am

This sample explains a simpler and recommended way to do what you want.
Pleae copy this sample into \fwh\samples folder and build it with buildx.bat or buildh.bat and test. You can adopt the same logic for your case.
We also recommend not to use deprecated methods like bOnPostEdit. XBrowse does the saving of data on its own.

Code: Select all  Expand view

#include "fivewin.ch"

REQUEST DBFCDX

function xbtest()

   local aStates
   local oDlg, oBrw, oFont

   RDDSETDEFAULT( "DBFCDX" )

   USE STATES SHARED
   aStates  := FW_DbfToArray()
   CLOSE STATES

/*
    Now aStates is 2-dimentional array.
    1st column is State Code
    2nd column is State name

    Customer.dbf has a field "STATE". This is State Code
    We want to display State Name in the browse listbox
    When user selects a State Name, we want to store State Code in the DBF
    XBrowse does this automatically
    PLEASE NEVER NEVER USE BONPOSTEDIT(). This is depricated many years back.

*/


   USE CUSTOMER SHARED
   DEFINE FONT oFont NAME "TAHOMA" SIZE 0,-14
   DEFINE DIALOG oDlg SIZE 700,400 PIXEL TRUEPIXEL FONT oFont

   @ 20,20 XBROWSE oBrw SIZE -20,-20 PIXEL OF oDlg ;
      DATASOURCE "CUSTOMER" ;
      COLUMNS "First", "City", "State" ;
      CELL LINES NOBORDER FASTEDIT

   WITH OBJECT oBrw
      :nEditTypes    := EDIT_GET
      WITH OBJECT :State
         :nEditType     := EDIT_LISTBOX
         :aEditListTxt  := aStates
      END
      //
      :CreateFromCode()
   END

   ACTIVATE DIALOG oDlg CENTERED
   RELEASE FONT oFont

return nil
 
Regards

G. N. Rao.
Hyderabad, India
User avatar
nageswaragunupudi
 
Posts: 10620
Joined: Sun Nov 19, 2006 5:22 am
Location: India

Re: Xbrowse - EDIT_LISTBOX

Postby rterraz » Mon Feb 13, 2017 11:54 pm

Hola Mr.Rao

Muchas gracias por su respuesta, muy clara...como siempre lo hace Ud.
Yo no sabia que el LIST_BOX del browse aceptaba arrays Multidimensionales !!!
Con respecto al :bOnPostEdit lo sigo usando por costumbre, lo reemplazo por :bOnChange o por otra opcion ?

Dr.Raul Terraz - Argentina
Gracias de nuevo
User avatar
rterraz
 
Posts: 182
Joined: Wed Nov 08, 2006 11:44 pm
Location: Argentina

Re: Xbrowse - EDIT_LISTBOX

Postby nageswaragunupudi » Tue Feb 14, 2017 12:39 am

Con respecto al :bOnPostEdit lo sigo usando por costumbre, lo reemplazo por :bOnChange o por otra opcion ?

Do not write anything.
XBrowse does everything on its own.
Please study the above sample again.
You can edit inline and modify all fields. We did not write any bOnPostEdit or bOnChange, ect.

The sample is a good example of xbrowse.

If you still have any doubts, please ask me. We would be too glad to clarify
Regards

G. N. Rao.
Hyderabad, India
User avatar
nageswaragunupudi
 
Posts: 10620
Joined: Sun Nov 19, 2006 5:22 am
Location: India

Re: Xbrowse - EDIT_LISTBOX

Postby rterraz » Tue Feb 14, 2017 3:00 pm

Ok Mr.Rao , dejare de usar el :bPostedit y :bOnchange

Cuando uso su ejemplo funciona perfectamente, pero al EDIT_LISTBOX yo le paso un array que tiene 3 elementos en cada subarray y no logro hacerlo funcionar.
En la columna del browse no aparece lo que indico al crear el mismo
mi codigo:

este es el array que genero
OpenDbf('wfprodu')
aProd:= FW_DBFToArray("descrip,codint,control", {|| wfprodu->control $ 'ABCDEFGV' })
Aeval(aProd,{|x| AADD( aList, x[1] ) } )
Dbclosearea
OpenDbf('wfsico')

/* wfsico.dbf es la base de datos para el browse que tiene un campo 'descrip' con el nombre del producto
y dos campos 'codint' y 'control' */

este es el browse
@ 40,0 XBROWSE oBrw OF oDlg ;
COLUMNS {"NROREG","FECHA","NROFAC","MEDICO","MATRIC","CLIEN","DIREC","DNI","PRODUCTO","CANT","CONTROL"} ;
COLSIZES { 60,80,70,135,60,120,120,70,165,70,40 } ;
HEADER {"Reg.","Fecha","Factura","Medico","Matricula","Paciente","Direccion","DNI","Producto","Cantidad","" } ;
FONT oFmini PIXEL ;
SIZE oDlg:nWidth-4,oDlg:nHeight - 70 ;
DATASOURCE 'WFSICO' ;
AUTOSORT

la columna que se edita (contiene la descripcion de un producto
WITH OBJECT oBrw:aCols[9]
:nEditType := EDIT_LISTBOX
:aEditListTxt:= aProd
END

Con 3 elementos no logro que el browse me muestre la descripcion del producto que esta en wfsico.dbf
Yo necesito que al seleccionar un producto distinto en el browse, se me actualicen los campos 'Codint' y 'Control' en la dbf wfsico.
Estos datos estan en la posicion 2 y 3 del aProd.

esto lo estoy logrando de esta manera:
le paso a EDIT_LISTBOX el array aList
y una vez que edita ejecuto:
:bOnChange := {|| cVal:= oBrw:aCols[9]:Value,;
if( ( nPos:=ASCAN( aProd, {|c| c[1]=cVal})) != 0 ,;
( oBrw:Lock() ,;
wfsico->codint :=aProd[nPos,2],;
wfsico->control:=aProd[nPos,3],;
oBrw:Unlock(),oBrw:RefreshCurrent() ) ,oBrw:SetFocus() ) }

Espero que se entienda
Como siempre, agradecido por su ayuda
User avatar
rterraz
 
Posts: 182
Joined: Wed Nov 08, 2006 11:44 pm
Location: Argentina


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 42 guests