Refrescar array en Browse

Post Reply
User avatar
Compuin
Posts: 1253
Joined: Tue Dec 28, 2010 1:29 pm
Location: Quebec, Canada
Has thanked: 9 times
Been thanked: 3 times

Refrescar array en Browse

Post by Compuin »

Hola Foro

Estoy cargarndo datos a un browse con un array y desde alli tengo un dialogo para modificar los campos. Todo bien hasta alli.

El problema es que cuando regreso al Browse luego de grabar en el dialogo no me refresca el array. Lo estoy haciendo de esta manera

CÓDIGO: SELECCIONAR TODO EXPANDIR VISTA

Code: Select all | Expand


       oCursor:Open(cSql )
       aData := ACLONE(oCursor:Cursor)

       MsgAlert("Cliente Actualizado exitosamente", "Actualizando Registro")

       oBrw:SetArray(aData, .t.)
       oBrw:Refresh()
       oBrw:SetFocus()



Que esta mal?
FWH 20.12
Hbmk2 32/64 Bits (Build 19.29.30133)
Microsoft Visual C 32 Bits
MySql 8.0.24 32/64 Bits
VS Code
JESUS MARIN
Posts: 178
Joined: Wed Jan 02, 2019 8:36 am

Re: Refrescar array en Browse

Post by JESUS MARIN »

Buenos dias
Yo lo hago de la siguiente manera :

oBrw:aArrayData=aVariaciones // actualizo el array sin re asignar
oBrw:Refresh()


Y me funciona a la perfección.


Saludos
Last edited by JESUS MARIN on Fri Apr 30, 2021 9:05 am, edited 1 time in total.
Jesús Marín
deumare@gmail.com

Mi especialidad en programación : Virtualidad real ( en vez de la realidad virtual ) ;)
User avatar
cnavarro
Posts: 6557
Joined: Wed Feb 15, 2012 8:25 pm
Location: España
Been thanked: 3 times

Re: Refrescar array en Browse

Post by cnavarro »

Jesus, esta forma que indicas es la que se debe utilizar en lugar de llamar al metodo SetArray
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
Compuin
Posts: 1253
Joined: Tue Dec 28, 2010 1:29 pm
Location: Quebec, Canada
Has thanked: 9 times
Been thanked: 3 times

Re: Refrescar array en Browse

Post by Compuin »

JESUS MARIN wrote:Buenos dias
Yo lo hago de la siguiente manera :

oBrw:aArrayData=aVariaciones // actualizo el array sin re asignar
oBrw:Refresh()


Y me funciona a la perfección.


Saludos



Gracias Jesus, pero como llenas de nuevo el array porque a mi me aparece o vacio o con datos desordenados
FWH 20.12
Hbmk2 32/64 Bits (Build 19.29.30133)
Microsoft Visual C 32 Bits
MySql 8.0.24 32/64 Bits
VS Code
JESUS MARIN
Posts: 178
Joined: Wed Jan 02, 2019 8:36 am

Re: Refrescar array en Browse

Post by JESUS MARIN »

Buenas

De la misma manera que lo rellenaste la primera vez.

Aunque realmente tienes dos opciones.

1) volver a leer los datos de la tabla y montarlos en un array
2) modificar el contenido del array con los datos que se acaban de modificar.

Luego te monto un ejemplo sencillo.
Jesús Marín
deumare@gmail.com

Mi especialidad en programación : Virtualidad real ( en vez de la realidad virtual ) ;)
JESUS MARIN
Posts: 178
Joined: Wed Jan 02, 2019 8:36 am

Re: Refrescar array en Browse

Post by JESUS MARIN »

Hola de nuevo.

Prueba este sencillo ejemplo (obviamente está reducido), pero ni siquiera necesitas actualizar el array.
Este ejemplo esta montado sobre una ventana principal MDI, ajustalo a tus necesidades.

Code: Select all | Expand



///////////////////////////////////////////////////////////////////////////////
// EJEMPLO ACTUALIZACION DE BROWSE
///////////////////////////////////////////////////////////////////////////////

STATIC FUNCTION ACT_BROWSE()

LOCAL oWnd, oBar
LOCAL aBotones:=ARRAY(10)
LOCAL oBrw, aLineas:={}


** ABRE TU TABLA Y LEE LOS DATOS QUE QUIERES PONER EN EL ARRAY
** VOY A SIMULAR UNOS DATOS OBTENIDOS

AADD(aLineas, {"COCHE         ","DIESEL        ", 1.25 } )
AADD(aLineas, {"MOTO          ","GASOLINA 95   ", 1.41 } )
AADD(aLineas, {"BICICLETA     ","A PEDALES     ", 0.00 } )

   DEFINE WINDOW oWnd MDICHILD OF oWndP TITLE "ACTUALIZACION DE XBROWSE"

   DEFINE BUTTONBAR oBar OF oWnd BUTTONSIZE 40,40
      oBar:SetColor(CLR_BLACK, CLR_WHITE)
      oBar:bRClicked := {|| nil }


      @01,000 BTNBMP aBotones[1] FILE oApp:cIcons+"EXIT_W10.BMP",oApp:cIcons+"EXIT_W10B.BMP"   SIZE 40,40 ACTION oWnd:End() OF oBar UPDATE NOBORDER
         aBotones[1]:cToolTip=CRLF+"   Salir   "+CRLF+" "
         aBotones[1]:SetColor(CLR_WHITE, CLR_WHITE )
         aBotones[1]:ColorMouseMove:=RGB(232,17,35)  // ROJO


   * OBJETO XBROWSE ********************************************
    oBrw:=TxBrowse():New(oWnd)
    oBrw:nDataLines := 1
    oBrw:SetArray(aLineas)                           // <- Aqui asignamos pero solo una vez
    oBrw:nColDividerStyle := LINESTYLE_BLACK
    oBrw:nRowDividerStyle := LINESTYLE_BLACK
    oBrw:nMarqueeStyle    := MARQSTYLE_HIGHLCELL
    oBrw:nTop     := 90
    oBrw:nLeft    := 5
    oBrw:nBottom  := 625
    oBrw:nRight   := 920
    oBrw:nRowHeight := 32
    oBrw:oFont    := oFont
    oBrw:aCols[1]:cHeader      := "Vehiculo"
    oBrw:aCols[2]:cHeader      := "Combustible"
    oBrw:aCols[3]:cHeader      := "Coste"
    oBrw:aCols[3]:cEditPicture := "999.99"
    oBrw:aCols[3]:nDataStrAlign := AL_RIGHT


    oBrw:aCols[1]:nWidth   :=200
    oBrw:aCols[2]:nWidth   :=265
    oBrw:aCols[3]:nWidth   :=95

    oBrw:bLDblClick := { || aLineas:=xModifica(aLineas,oBrw) }    // CON DOBLE CLICK MODIFICAS EL REGISTRO O EN UN BOTON O LO QUE QUIERAS

    oBrw:CreateFromCode()


   ACTIVATE WINDOW oWnd MAXIMIZED ON INIT oBrw:SetFocus()



RETURN(NIL)


STATIC FUNCTION xModifica(aLineas,oBrw)

LOCAL oDlg
LOCAL oGet1, oGet2, oGet3
LOCAL aGets:=ARRAY(3)

aGets[1]:=aLineas[oBrw:nArrayAt,1]
aGets[2]:=aLineas[oBrw:nArrayAt,2]
aGets[3]:=aLineas[oBrw:nArrayAt,3]



DEFINE DIALOG oDlg SIZE 400,200 TITLE "EDICION DE ELEMENTO DEL XBROWSE"

@10,10 SAY "Vehiculo"    OF oDlg SIZE 60,20 PIXEL RIGHT
@30,10 SAY "Combustible" OF oDlg SIZE 60,20 PIXEL RIGHT
@50,10 SAY "Coste"       OF oDlg SIZE 60,20 PIXEL RIGHT

@10,75 GET oGet1 VAR aGets[1] OF oDlg SIZE 120,15 PIXEL
@30,75 GET oGet2 VAR aGets[2] OF oDlg SIZE 120,15 PIXEL
@50,75 GET oGet3 VAR aGets[3] OF oDlg SIZE 120,15 PIXEL PICT "99999.99"

@80,10 BUTTON "Aceptar"  OF oDlg SIZE 50,15 PIXEL ACTION ( aLineas:=GrabarDatos(aGets, aLineas,oBrw), oDlg:End() )
@80,65 BUTTON "Cancelar" OF oDlg SIZE 50,15 PIXEL ACTION oDlg:End()


ACTIVATE DIALOG oDlg CENTER
return(aLineas)


STATIC FUNCTION GrabarDatos(aGets, aLineas, oBrw)

// en esta funcion (como hemos dado a "Aceptar", grabamos los datos en la tabla DBF, SQL, lo que sea)
// tambien actualizo los datos del array aLineas que devolveré


/// USE .....
/// SEEK()
/// REPLACE() .... .ETC.


// Ahora modifico los datos del array con los get modificados

aLineas[oBrw:nArrayAt,1]:=aGets[1]
aLineas[oBrw:nArrayAt,2]:=aGets[2]
aLineas[oBrw:nArrayAt,3]:=aGets[3]

// finalmente devuelvo el array

RETURN(aLineas)






 
Jesús Marín
deumare@gmail.com

Mi especialidad en programación : Virtualidad real ( en vez de la realidad virtual ) ;)
JESUS MARIN
Posts: 178
Joined: Wed Jan 02, 2019 8:36 am

Re: Refrescar array en Browse

Post by JESUS MARIN »

Image
Jesús Marín
deumare@gmail.com

Mi especialidad en programación : Virtualidad real ( en vez de la realidad virtual ) ;)
User avatar
Compuin
Posts: 1253
Joined: Tue Dec 28, 2010 1:29 pm
Location: Quebec, Canada
Has thanked: 9 times
Been thanked: 3 times

Re: Refrescar array en Browse

Post by Compuin »

JESUS MARIN wrote:Image


Jesus, gracias

Por favor tendras un email para comunicarme contigo?
FWH 20.12
Hbmk2 32/64 Bits (Build 19.29.30133)
Microsoft Visual C 32 Bits
MySql 8.0.24 32/64 Bits
VS Code
JESUS MARIN
Posts: 178
Joined: Wed Jan 02, 2019 8:36 am

Re: Refrescar array en Browse

Post by JESUS MARIN »

deumare [at] gmail.com
Jesús Marín
deumare@gmail.com

Mi especialidad en programación : Virtualidad real ( en vez de la realidad virtual ) ;)
Post Reply