Refrescar array en Browse

Refrescar array en Browse

Postby Compuin » Thu Apr 29, 2021 12:28 pm

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 view

       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
Compuin
 
Posts: 1214
Joined: Tue Dec 28, 2010 1:29 pm
Location: Quebec, Canada

Re: Refrescar array en Browse

Postby JESUS MARIN » Fri Apr 30, 2021 9:01 am

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
JESUS MARIN
 
Posts: 176
Joined: Wed Jan 02, 2019 8:36 am

Re: Refrescar array en Browse

Postby cnavarro » Fri Apr 30, 2021 9:05 am

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
cnavarro
 
Posts: 6541
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: Refrescar array en Browse

Postby Compuin » Thu May 20, 2021 5:09 pm

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
Compuin
 
Posts: 1214
Joined: Tue Dec 28, 2010 1:29 pm
Location: Quebec, Canada

Re: Refrescar array en Browse

Postby JESUS MARIN » Fri May 21, 2021 6:47 am

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
JESUS MARIN
 
Posts: 176
Joined: Wed Jan 02, 2019 8:36 am

Re: Refrescar array en Browse

Postby JESUS MARIN » Fri May 21, 2021 11:06 am

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 view


///////////////////////////////////////////////////////////////////////////////
// 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
JESUS MARIN
 
Posts: 176
Joined: Wed Jan 02, 2019 8:36 am

Re: Refrescar array en Browse

Postby JESUS MARIN » Fri May 21, 2021 11:38 am

Image
Jesús Marín
JESUS MARIN
 
Posts: 176
Joined: Wed Jan 02, 2019 8:36 am

Re: Refrescar array en Browse

Postby Compuin » Fri May 21, 2021 1:56 pm

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
Compuin
 
Posts: 1214
Joined: Tue Dec 28, 2010 1:29 pm
Location: Quebec, Canada

Re: Refrescar array en Browse

Postby JESUS MARIN » Fri May 21, 2021 3:59 pm

deumare [at] gmail.com
Jesús Marín
JESUS MARIN
 
Posts: 176
Joined: Wed Jan 02, 2019 8:36 am


Return to FiveWin para Harbour/xHarbour

Who is online

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