FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Refrescar array en Browse
Posts: 1276
Joined: Tue Dec 28, 2010 01:29 PM
Refrescar array en Browse
Posted: 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 (fw): Select all Collapse
       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 25.12

Harbour/Hbmk2

Microsoft Visual C++

MySql 8.0

Antigravity

Posts: 199
Joined: Wed Jan 02, 2019 08:36 AM
Re: Refrescar array en Browse
Posted: Fri Apr 30, 2021 09: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

Jesús Marín
deumare@gmail.com
Posts: 6755
Joined: Wed Feb 15, 2012 08:25 PM
Re: Refrescar array en Browse
Posted: Fri Apr 30, 2021 09: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
Posts: 1276
Joined: Tue Dec 28, 2010 01:29 PM
Re: Refrescar array en Browse
Posted: Thu May 20, 2021 05: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 25.12

Harbour/Hbmk2

Microsoft Visual C++

MySql 8.0

Antigravity

Posts: 199
Joined: Wed Jan 02, 2019 08:36 AM
Re: Refrescar array en Browse
Posted: Fri May 21, 2021 06: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
deumare@gmail.com
Posts: 199
Joined: Wed Jan 02, 2019 08:36 AM
Re: Refrescar array en Browse
Posted: 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 (fw): Select all Collapse
///////////////////////////////////////////////////////////////////////////////
// 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
Posts: 199
Joined: Wed Jan 02, 2019 08:36 AM
Re: Refrescar array en Browse
Posted: Fri May 21, 2021 11:38 AM
Jesús Marín
deumare@gmail.com
Posts: 1276
Joined: Tue Dec 28, 2010 01:29 PM
Re: Refrescar array en Browse
Posted: Fri May 21, 2021 01:56 PM
JESUS MARIN wrote:


Jesus, gracias

Por favor tendras un email para comunicarme contigo?

FWH 25.12

Harbour/Hbmk2

Microsoft Visual C++

MySql 8.0

Antigravity

Posts: 199
Joined: Wed Jan 02, 2019 08:36 AM
Re: Refrescar array en Browse
Posted: Fri May 21, 2021 03:59 PM

deumare [at] gmail.com

Jesús Marín
deumare@gmail.com

Continue the discussion