Page 1 of 1

DBCombo no refresca items agregados

Posted: Mon Jul 03, 2006 8:20 pm
by MarioG
Hola gente:
En un Dlg tengo un DBCombo y un Button que acceder a una función para agregar/modificar la lista desplegada en el DBCombo. El problema es que luego de agregado/modificado un registro la lista no se refresca.
El código es el siguiente (utilizo tDbf)

Code: Select all

   REDEFINE DBCOMBO     ::aoDlg[_Cmb03] VAR cProfesion ID 223 UPDATE OF oFld:aDialogs[2] ;
            ALIAS       ::aoDbF[_PROF]:cAlias ;
            ITEMFIELD   "ID_Prof"   ;
            LISTFIELD   "Desc_Prof" 
            
   REDEFINE BTNBMP  ID 290 OF oFld:aDialogs[2] ;
            RESNAME "" ;
            TOOLTIP "Agregar Profesional" ;
            ACTION  oSelf:LstProfesion()         , ;
                    oSelf:aoDlg[_Cmb03]:ReFill(), ;
                    oSelf:aoDlg[_Cmb03]:Refresh()
Posteriormente probé lo siguiente:

Code: Select all

   REDEFINE DBCOMBO     ::aoDlg[_Cmb03] VAR cProfesion ID 223 UPDATE OF oFld:aDialogs[2] ;
            ALIAS       ::aoDbF[_PROF]:cAlias ;
            ITEMFIELD   "ID_Prof"   ;
            LISTFIELD   "Desc_Prof" 
            
   REDEFINE BTNBMP  ID 290 OF oFld:aDialogs[2] ;
            RESNAME "" ;
            TOOLTIP "Agregar Profesional" ;
            ACTION  if( oSelf:LstProfesion( @cProfesion )         , ;
                        oSelf:aoDlg[_Cmb03]:Insert( cProfesion )  , ;
                        oSelf:aoDlg[_Cmb03]:Modify( cProfesion ) ), ;
                    oSelf:aoDlg[_Cmb03]:ReFill(), ;
                    oSelf:aoDlg[_Cmb03]:Refresh()
Al desplegar la lista, en ninguno de _ el registro agregado/modificado, se visualiza en su nuevo estado.

Que estoy haciendo mal? (Uso FWH 2.6May05)

gracias desde ya, Saludos

Posted: Mon Jul 03, 2006 9:14 pm
by Manuel Valdenebro
¿ Has probado cambiar REfresh() por Update() ?

Posted: Tue Jul 04, 2006 12:56 am
by MarioG
Gracias por responder
De la unica forma que agrega es haciendo: oCmb:Add( cDato ), luego oCmb:Update(). El valor se agrega al final de la lista
Aunque la ayuda dice lo que hacen ::Insert(), ::Modify(), ::Refill(); ninguno de ello hace lo que dice hacer...salvo que no entienda el concepto

Posted: Tue Jul 04, 2006 5:22 pm
by R.F.
Pues va a ser que no.

El DBCombo llena sus items a partir del contenido de una base de datos, eso lo hace en elmetodo constructor del control y a partir de ahi se convierte en un combo normal, sin ninguna relacion con la base de datos, es decir, no se actualiza cuando el DBF cambia.

Lo que tienes que hacer y eso manualmente, es volver a hacer un barrido de la base de dato, rellenando un nuevo array y luego con el metodo ::SETITEMS() cargar los valores nuevos.

Posted: Tue Jul 04, 2006 6:30 pm
by RenOmaS
Agrega este methodo a DbCombo.prg

Code: Select all

METHOD Update() CLASS TDBCombo
   Local bChange:= ::bChange

   ::bChange:= Nil
   ::Reset()
   ::Fill()
   ::Default()

   ::bChange := bChange

   Return NIl
despues es solo hace

oCmb:Update)

Saludos

Posted: Tue Jul 04, 2006 7:21 pm
by Antonio Linares
Gracias por la aportación, lo añadimos a la clase :)

Posted: Tue Jul 04, 2006 11:01 pm
by MarioG
Gente; muchas gracias!
Me alegro que mi consulta sirviera para mejorar la clase! :-)

saludos