Estimados amigos
He implementado la edicion en un ArrayBrowse a partir de algunos ejemplos
que he visto aqui en este foro incluyendo la ayuda de Xailer.
El problema que no logro resolver es evitar que se cancele la edicion cuando
en la ultima columna muestro un mensaje de validacion. El codigo que muestro
abajo funciona bien en la primera columna, es decir, si la validacion se
activa no sale de la edicion, mientras que en la ultima columna editable de
mi browse a pesar de devolver .F. en el evento OnExit se cancela la edicion
del browse.
He intentado llamar nuevamente al evento ::oGrid:Edit() pero entiendo que
esto no es lo correcto, ademas que no funciona. Me gustaria que me dieran
una mano con este problema
Gracias y saludos
Williams Pacheco
//---------------------------------------------------------- --------------------
METHOD ColCantidadExit( oSender, oGridEdit, oNextCtl ) CLASS Orders
LOCAL cCodigo, nQtty, aStock, lRetVal := .F.
LOCAL cMsg, aWarehouse, nWarehouse
nQtty := oSender:Value
cCodigo := ::oGrid:GetValue(1)
nExistencia := 100
DO CASE
CASE nQtty = 0
MsgStop("Por favor indique la cantidad")
CASE nQtty <= nExistencia
lRetVal := .T.
OTHERWISE
MsgStop("La cantidad indicada no está disponible")
ENDCASE
RETURN lRetVal
//---------------------------------------------------------- --------------------
METHOD ColCantidadPostEdit( oSender, Value, lCanceled, nKey ) CLASS Orders
IF lCanceled
::CancelClick()
ELSE
IF !Empty( Value ) .and. !::oGrid:IsMultipleEdit()
oSender:oParent:SetValue( oSender, Value )
ENDIF
ENDIF
RETURN Nil
//---------------------------------------------------------- --------------------
METHOD ColPrecioExit( oSender, oGridEdit, oNextCtl ) CLASS Orders
LOCAL lRetVal := .T., nPrice, nQtty
nPrice := 1500
nQtty := ::oGrid:GetValue(3)
IF nPrice <= 0
MsgStop("Seleccione un precio válido")
oNextCtl := oSender
lRetVal := .F.
ELSE
::oGrid:SetValue(7, nPrice * nQtty )
ENDIF
RETURN lRetVal
//---------------------------------------------------------- --------------------
METHOD ColPrecioPostEdit( oSender, Value, lCanceled, nKey ) CLASS Orders
IF lCanceled ::CancelClick()
ELSE
IF !Empty( Value ) .and. !::oGrid:IsMultipleEdit()
oSender:oParent:SetValue( oSender, Value )
ENDIF
ENDIF
RETURN Nil
In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.
Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.
Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.
Ayuda con edicion del ArrayBrowse
-
- Mensajes: 165
- Registrado: Mié Jul 08, 2009 5:26 pm
-
- Mensajes: 558
- Registrado: Mar Feb 09, 2010 2:26 pm
Ayuda con edicion del ArrayBrowse
Saludos:
Esto que preguntas se ha respondido varias veces ya, te diré que
empleando un ArrayBrowse para la edición de un registro en la última
columna termina siempre, en este caso se aconseja emplear para la
edición un formulario MODAL.
Mira en el foro privado y verás que hay varias respuestas sobre el tema.
José Ramón Castro.
Williams Pacheco escribió:
> Estimados amigos
>
> He implementado la edicion en un ArrayBrowse a partir de algunos
> ejemplos que he visto aqui en este foro incluyendo la ayuda de Xailer.
>
> El problema que no logro resolver es evitar que se cancele la edicion
> cuando en la ultima columna muestro un mensaje de validacion. El codigo
> que muestro abajo funciona bien en la primera columna, es decir, si la
> validacion se activa no sale de la edicion, mientras que en la ultima
> columna editable de mi browse a pesar de devolver .F. en el evento
> OnExit se cancela la edicion del browse.
>
> He intentado llamar nuevamente al evento ::oGrid:Edit() pero entiendo
> que esto no es lo correcto, ademas que no funciona. Me gustaria que me
> dieran una mano con este problema
>
> Gracias y saludos
>
> Williams Pacheco
>
>
> //---------------------------------------------------------- --------------------
>
>
> METHOD ColCantidadExit( oSender, oGridEdit, oNextCtl ) CLASS Orders
> LOCAL cCodigo, nQtty, aStock, lRetVal := .F.
> LOCAL cMsg, aWarehouse, nWarehouse
>
> nQtty := oSender:Value
> cCodigo := ::oGrid:GetValue(1)
> nExistencia := 100
>
> DO CASE
> CASE nQtty = 0
> MsgStop("Por favor indique la cantidad")
> CASE nQtty <= nExistencia
> lRetVal := .T.
> OTHERWISE
> MsgStop("La cantidad indicada no está disponible")
> ENDCASE
>
> RETURN lRetVal
>
> //---------------------------------------------------------- --------------------
>
>
> METHOD ColCantidadPostEdit( oSender, Value, lCanceled, nKey ) CLASS Orders
>
> IF lCanceled
> ::CancelClick()
> ELSE
> IF !Empty( Value ) .and. !::oGrid:IsMultipleEdit()
> oSender:oParent:SetValue( oSender, Value )
> ENDIF
> ENDIF
>
> RETURN Nil
>
> //---------------------------------------------------------- --------------------
>
>
> METHOD ColPrecioExit( oSender, oGridEdit, oNextCtl ) CLASS Orders
> LOCAL lRetVal := .T., nPrice, nQtty
>
> nPrice := 1500
> nQtty := ::oGrid:GetValue(3)
> IF nPrice <= 0
> MsgStop("Seleccione un precio válido")
> oNextCtl := oSender
> lRetVal := .F.
> ELSE
> ::oGrid:SetValue(7, nPrice * nQtty )
> ENDIF
>
> RETURN lRetVal
>
> //---------------------------------------------------------- --------------------
>
>
> METHOD ColPrecioPostEdit( oSender, Value, lCanceled, nKey ) CLASS Orders
>
> IF lCanceled ::CancelClick()
> ELSE
> IF !Empty( Value ) .and. !::oGrid:IsMultipleEdit()
> oSender:oParent:SetValue( oSender, Value )
> ENDIF
> ENDIF
>
> RETURN Nil
>
>
Esto que preguntas se ha respondido varias veces ya, te diré que
empleando un ArrayBrowse para la edición de un registro en la última
columna termina siempre, en este caso se aconseja emplear para la
edición un formulario MODAL.
Mira en el foro privado y verás que hay varias respuestas sobre el tema.
José Ramón Castro.
Williams Pacheco escribió:
> Estimados amigos
>
> He implementado la edicion en un ArrayBrowse a partir de algunos
> ejemplos que he visto aqui en este foro incluyendo la ayuda de Xailer.
>
> El problema que no logro resolver es evitar que se cancele la edicion
> cuando en la ultima columna muestro un mensaje de validacion. El codigo
> que muestro abajo funciona bien en la primera columna, es decir, si la
> validacion se activa no sale de la edicion, mientras que en la ultima
> columna editable de mi browse a pesar de devolver .F. en el evento
> OnExit se cancela la edicion del browse.
>
> He intentado llamar nuevamente al evento ::oGrid:Edit() pero entiendo
> que esto no es lo correcto, ademas que no funciona. Me gustaria que me
> dieran una mano con este problema
>
> Gracias y saludos
>
> Williams Pacheco
>
>
> //---------------------------------------------------------- --------------------
>
>
> METHOD ColCantidadExit( oSender, oGridEdit, oNextCtl ) CLASS Orders
> LOCAL cCodigo, nQtty, aStock, lRetVal := .F.
> LOCAL cMsg, aWarehouse, nWarehouse
>
> nQtty := oSender:Value
> cCodigo := ::oGrid:GetValue(1)
> nExistencia := 100
>
> DO CASE
> CASE nQtty = 0
> MsgStop("Por favor indique la cantidad")
> CASE nQtty <= nExistencia
> lRetVal := .T.
> OTHERWISE
> MsgStop("La cantidad indicada no está disponible")
> ENDCASE
>
> RETURN lRetVal
>
> //---------------------------------------------------------- --------------------
>
>
> METHOD ColCantidadPostEdit( oSender, Value, lCanceled, nKey ) CLASS Orders
>
> IF lCanceled
> ::CancelClick()
> ELSE
> IF !Empty( Value ) .and. !::oGrid:IsMultipleEdit()
> oSender:oParent:SetValue( oSender, Value )
> ENDIF
> ENDIF
>
> RETURN Nil
>
> //---------------------------------------------------------- --------------------
>
>
> METHOD ColPrecioExit( oSender, oGridEdit, oNextCtl ) CLASS Orders
> LOCAL lRetVal := .T., nPrice, nQtty
>
> nPrice := 1500
> nQtty := ::oGrid:GetValue(3)
> IF nPrice <= 0
> MsgStop("Seleccione un precio válido")
> oNextCtl := oSender
> lRetVal := .F.
> ELSE
> ::oGrid:SetValue(7, nPrice * nQtty )
> ENDIF
>
> RETURN lRetVal
>
> //---------------------------------------------------------- --------------------
>
>
> METHOD ColPrecioPostEdit( oSender, Value, lCanceled, nKey ) CLASS Orders
>
> IF lCanceled ::CancelClick()
> ELSE
> IF !Empty( Value ) .and. !::oGrid:IsMultipleEdit()
> oSender:oParent:SetValue( oSender, Value )
> ENDIF
> ENDIF
>
> RETURN Nil
>
>
-
- Mensajes: 165
- Registrado: Mié Jul 08, 2009 5:26 pm
Ayuda con edicion del ArrayBrowse
Gracias Jose Ramon por tu respuesta y tiempo dedicado a ella.
He visto muchos mensajes que hablan de este tema, tanto en el foro privado
como en este, pero aunque parezca extraño en ninguno vi una explicacion
clara sobre el tema, de hecho, lo que pude leer generalmente dice algo como
"esto se ha tratado muchas veces y bla bla bla... lea/busque en el foro las
respuestas que se han dado..."
Ahora bien el tema creo que tiene mucha importancia ya que se ha tratado
tantas veces. A primera vista pareciera que "quisieramos" (y me refiero a
todos los que hemos hablado sobre este tema) poner al browse a trabajar como
lo hacia en FW (al que algunos llaman el innombrable) el TWBrowse. Se que el
modo que emplea Xailer es el correcto porque ofrece mas oportunidades al
desarrollador y por ende al usuario. En mi caso tengo muy claro lo que es
trabajar como modal y como mdi, de hecho mi aplicacion esta construida
explotando al maximo el modelo mdi.
Lo que veo en todo esto, y es una opinion muy personal, que no es muy
"normal" que un un evento funcione de una forma en las columnas previas a la
ultima columna editable y que en la ultima sencillamente aborte la edicion.
La pregunta que me hago es por qué no se aborta tambien la edicion en las
columna previas?... será porque la multiedicion indica que aún quedan
columnas editables?... quizas esa sea una respuesta razonable, pero si lo
fuera asi, como se logra que ese método pudiera aplicarse tambien a la
ultima columna?...
Entiendo que debe haber algo que "no muy normal" para que tantas personas
hayan preguntado sobre el mismo tema. Posiblemente una explicacion completa
podria ser la solucion. En cualquier caso hay maneras de darle la vuelta al
asunto, una de ellas seria crear una serie de controles Edit que sean los
que manejen la informacion y luego "alimenten" al grid, pero como puede
verse, utilizar el grid solo para mostrar informacion sería una lastima por
tanto esfuerzo que los desarrolladores de Xailer hayan puesto en su
construccion.
Una vez mas gracias por tu ayuda Jose Ramon
Saludos
Williams Pacheco
"José Ramón Castro Polinio" <jrcpoli-quitarpara_envio]"@terra.es> wrote in
message news:[email=4b1bbb24@svctag-j7w3v3j....]4b1bbb24@svctag-j7w3v3j....[/email]
> Saludos:
>
> Esto que preguntas se ha respondido varias veces ya, te diré que empleando
> un ArrayBrowse para la edición de un registro en la última columna termina
> siempre, en este caso se aconseja emplear para la edición un formulario
> MODAL.
>
> Mira en el foro privado y verás que hay varias respuestas sobre el tema.
>
> José Ramón Castro.
>
> Williams Pacheco escribió:
>> Estimados amigos
>>
>> He implementado la edicion en un ArrayBrowse a partir de algunos ejemplos
>> que he visto aqui en este foro incluyendo la ayuda de Xailer.
>>
>> El problema que no logro resolver es evitar que se cancele la edicion
>> cuando en la ultima columna muestro un mensaje de validacion. El codigo
>> que muestro abajo funciona bien en la primera columna, es decir, si la
>> validacion se activa no sale de la edicion, mientras que en la ultima
>> columna editable de mi browse a pesar de devolver .F. en el evento OnExit
>> se cancela la edicion del browse.
>>
>> He intentado llamar nuevamente al evento ::oGrid:Edit() pero entiendo que
>> esto no es lo correcto, ademas que no funciona. Me gustaria que me dieran
>> una mano con este problema
>>
>> Gracias y saludos
>>
>> Williams Pacheco
>>
>>
>> //---------------------------------------------------------- --------------------
>>
>>
>> METHOD ColCantidadExit( oSender, oGridEdit, oNextCtl ) CLASS Orders
>> LOCAL cCodigo, nQtty, aStock, lRetVal := .F.
>> LOCAL cMsg, aWarehouse, nWarehouse
>>
>> nQtty := oSender:Value
>> cCodigo := ::oGrid:GetValue(1)
>> nExistencia := 100
>>
>> DO CASE
>> CASE nQtty = 0
>> MsgStop("Por favor indique la cantidad")
>> CASE nQtty <= nExistencia
>> lRetVal := .T.
>> OTHERWISE
>> MsgStop("La cantidad indicada no está disponible")
>> ENDCASE
>>
>> RETURN lRetVal
>>
>> //---------------------------------------------------------- --------------------
>>
>>
>> METHOD ColCantidadPostEdit( oSender, Value, lCanceled, nKey ) CLASS
>> Orders
>>
>> IF lCanceled
>> ::CancelClick()
>> ELSE
>> IF !Empty( Value ) .and. !::oGrid:IsMultipleEdit()
>> oSender:oParent:SetValue( oSender, Value )
>> ENDIF
>> ENDIF
>>
>> RETURN Nil
>>
>> //---------------------------------------------------------- --------------------
>>
>>
>> METHOD ColPrecioExit( oSender, oGridEdit, oNextCtl ) CLASS Orders
>> LOCAL lRetVal := .T., nPrice, nQtty
>>
>> nPrice := 1500
>> nQtty := ::oGrid:GetValue(3)
>> IF nPrice <= 0
>> MsgStop("Seleccione un precio válido")
>> oNextCtl := oSender
>> lRetVal := .F.
>> ELSE
>> ::oGrid:SetValue(7, nPrice * nQtty )
>> ENDIF
>>
>> RETURN lRetVal
>>
>> //---------------------------------------------------------- --------------------
>>
>>
>> METHOD ColPrecioPostEdit( oSender, Value, lCanceled, nKey ) CLASS Orders
>>
>> IF lCanceled ::CancelClick()
>> ELSE
>> IF !Empty( Value ) .and. !::oGrid:IsMultipleEdit()
>> oSender:oParent:SetValue( oSender, Value )
>> ENDIF
>> ENDIF
>>
>> RETURN Nil
>>
He visto muchos mensajes que hablan de este tema, tanto en el foro privado
como en este, pero aunque parezca extraño en ninguno vi una explicacion
clara sobre el tema, de hecho, lo que pude leer generalmente dice algo como
"esto se ha tratado muchas veces y bla bla bla... lea/busque en el foro las
respuestas que se han dado..."
Ahora bien el tema creo que tiene mucha importancia ya que se ha tratado
tantas veces. A primera vista pareciera que "quisieramos" (y me refiero a
todos los que hemos hablado sobre este tema) poner al browse a trabajar como
lo hacia en FW (al que algunos llaman el innombrable) el TWBrowse. Se que el
modo que emplea Xailer es el correcto porque ofrece mas oportunidades al
desarrollador y por ende al usuario. En mi caso tengo muy claro lo que es
trabajar como modal y como mdi, de hecho mi aplicacion esta construida
explotando al maximo el modelo mdi.
Lo que veo en todo esto, y es una opinion muy personal, que no es muy
"normal" que un un evento funcione de una forma en las columnas previas a la
ultima columna editable y que en la ultima sencillamente aborte la edicion.
La pregunta que me hago es por qué no se aborta tambien la edicion en las
columna previas?... será porque la multiedicion indica que aún quedan
columnas editables?... quizas esa sea una respuesta razonable, pero si lo
fuera asi, como se logra que ese método pudiera aplicarse tambien a la
ultima columna?...
Entiendo que debe haber algo que "no muy normal" para que tantas personas
hayan preguntado sobre el mismo tema. Posiblemente una explicacion completa
podria ser la solucion. En cualquier caso hay maneras de darle la vuelta al
asunto, una de ellas seria crear una serie de controles Edit que sean los
que manejen la informacion y luego "alimenten" al grid, pero como puede
verse, utilizar el grid solo para mostrar informacion sería una lastima por
tanto esfuerzo que los desarrolladores de Xailer hayan puesto en su
construccion.
Una vez mas gracias por tu ayuda Jose Ramon
Saludos
Williams Pacheco
"José Ramón Castro Polinio" <jrcpoli-quitarpara_envio]"@terra.es> wrote in
message news:[email=4b1bbb24@svctag-j7w3v3j....]4b1bbb24@svctag-j7w3v3j....[/email]
> Saludos:
>
> Esto que preguntas se ha respondido varias veces ya, te diré que empleando
> un ArrayBrowse para la edición de un registro en la última columna termina
> siempre, en este caso se aconseja emplear para la edición un formulario
> MODAL.
>
> Mira en el foro privado y verás que hay varias respuestas sobre el tema.
>
> José Ramón Castro.
>
> Williams Pacheco escribió:
>> Estimados amigos
>>
>> He implementado la edicion en un ArrayBrowse a partir de algunos ejemplos
>> que he visto aqui en este foro incluyendo la ayuda de Xailer.
>>
>> El problema que no logro resolver es evitar que se cancele la edicion
>> cuando en la ultima columna muestro un mensaje de validacion. El codigo
>> que muestro abajo funciona bien en la primera columna, es decir, si la
>> validacion se activa no sale de la edicion, mientras que en la ultima
>> columna editable de mi browse a pesar de devolver .F. en el evento OnExit
>> se cancela la edicion del browse.
>>
>> He intentado llamar nuevamente al evento ::oGrid:Edit() pero entiendo que
>> esto no es lo correcto, ademas que no funciona. Me gustaria que me dieran
>> una mano con este problema
>>
>> Gracias y saludos
>>
>> Williams Pacheco
>>
>>
>> //---------------------------------------------------------- --------------------
>>
>>
>> METHOD ColCantidadExit( oSender, oGridEdit, oNextCtl ) CLASS Orders
>> LOCAL cCodigo, nQtty, aStock, lRetVal := .F.
>> LOCAL cMsg, aWarehouse, nWarehouse
>>
>> nQtty := oSender:Value
>> cCodigo := ::oGrid:GetValue(1)
>> nExistencia := 100
>>
>> DO CASE
>> CASE nQtty = 0
>> MsgStop("Por favor indique la cantidad")
>> CASE nQtty <= nExistencia
>> lRetVal := .T.
>> OTHERWISE
>> MsgStop("La cantidad indicada no está disponible")
>> ENDCASE
>>
>> RETURN lRetVal
>>
>> //---------------------------------------------------------- --------------------
>>
>>
>> METHOD ColCantidadPostEdit( oSender, Value, lCanceled, nKey ) CLASS
>> Orders
>>
>> IF lCanceled
>> ::CancelClick()
>> ELSE
>> IF !Empty( Value ) .and. !::oGrid:IsMultipleEdit()
>> oSender:oParent:SetValue( oSender, Value )
>> ENDIF
>> ENDIF
>>
>> RETURN Nil
>>
>> //---------------------------------------------------------- --------------------
>>
>>
>> METHOD ColPrecioExit( oSender, oGridEdit, oNextCtl ) CLASS Orders
>> LOCAL lRetVal := .T., nPrice, nQtty
>>
>> nPrice := 1500
>> nQtty := ::oGrid:GetValue(3)
>> IF nPrice <= 0
>> MsgStop("Seleccione un precio válido")
>> oNextCtl := oSender
>> lRetVal := .F.
>> ELSE
>> ::oGrid:SetValue(7, nPrice * nQtty )
>> ENDIF
>>
>> RETURN lRetVal
>>
>> //---------------------------------------------------------- --------------------
>>
>>
>> METHOD ColPrecioPostEdit( oSender, Value, lCanceled, nKey ) CLASS Orders
>>
>> IF lCanceled ::CancelClick()
>> ELSE
>> IF !Empty( Value ) .and. !::oGrid:IsMultipleEdit()
>> oSender:oParent:SetValue( oSender, Value )
>> ENDIF
>> ENDIF
>>
>> RETURN Nil
>>
-
- Mensajes: 558
- Registrado: Mar Feb 09, 2010 2:26 pm
Ayuda con edicion del ArrayBrowse
Saludos:
Williams Pacheco escribió:
> Gracias Jose Ramon por tu respuesta y tiempo dedicado a ella.
>
> He visto muchos mensajes que hablan de este tema, tanto en el foro
> privado como en este, pero aunque parezca extraño en ninguno vi una
> explicacion clara sobre el tema, de hecho, lo que pude leer generalmente
> dice algo como "esto se ha tratado muchas veces y bla bla bla...
> lea/busque en el foro las respuestas que se han dado..."
Busca en el foro privado poniendo en búsquedas "El OnExit en la última
columna" y si lees el hilo creo que tendrás una respuesta adecuada.
>
> Ahora bien el tema creo que tiene mucha importancia ya que se ha tratado
> tantas veces. A primera vista pareciera que "quisieramos" (y me refiero
> a todos los que hemos hablado sobre este tema) poner al browse a
> trabajar como lo hacia en FW (al que algunos llaman el innombrable) el
> TWBrowse. Se que el modo que emplea Xailer es el correcto porque ofrece
> mas oportunidades al desarrollador y por ende al usuario. En mi caso
> tengo muy claro lo que es trabajar como modal y como mdi, de hecho mi
> aplicacion esta construida explotando al maximo el modelo mdi.
>
> Lo que veo en todo esto, y es una opinion muy personal, que no es muy
> "normal" que un un evento funcione de una forma en las columnas previas
> a la ultima columna editable y que en la ultima sencillamente aborte la
> edicion. La pregunta que me hago es por qué no se aborta tambien la
> edicion en las columna previas?... será porque la multiedicion indica
> que aún quedan columnas editables?... quizas esa sea una respuesta
> razonable, pero si lo fuera asi, como se logra que ese método pudiera
> aplicarse tambien a la ultima columna?...
Después de la explicación veras que es porque no tiene siguiente control
para cargar en el evento <oNextCtl>: Objeto que va a recibir el foco.
>
> Entiendo que debe haber algo que "no muy normal" para que tantas
> personas hayan preguntado sobre el mismo tema. Posiblemente una
> explicacion completa podria ser la solucion. En cualquier caso hay
> maneras de darle la vuelta al asunto, una de ellas seria crear una serie
> de controles Edit que sean los que manejen la informacion y luego
> "alimenten" al grid, pero como puede verse, utilizar el grid solo para
> mostrar informacion sería una lastima por tanto esfuerzo que los
> desarrolladores de Xailer hayan puesto en su construccion.
Quizás lo que debes de usar es un formulario aparte que contenga el
grid, pero que sea ShowModal, en su ejecución y no se cierre mientras no
pulses un botón de aceptar, que supervise que los elementos del grid
sean todos correcto y si alguno, sobre todo el último no lo es se
posicione de nuevo en dicha columna y fila, también puedes hacer que la
edición se realice en un formulario hijo Modal que realice lo mismo que
pretendes hacer en el grid.
Puede que alguno haya implementado algo que sea diferente yo en mi caso
empleo este último método del formulario para editar el contenido del
grid, a no ser que la última columna sea tipo :nEditType:= beLISTBOX
que sé que tendré un valor por defecto.
>
> Una vez mas gracias por tu ayuda Jose Ramon
Gracías a tí.
>
> Saludos
>
> Williams Pacheco
>
>
José Ramón Castro.
> "José Ramón Castro Polinio" <jrcpoli-quitarpara_envio]"@terra.es>
> wrote in message news:[email=4b1bbb24@svctag-j7w3v3j....]4b1bbb24@svctag-j7w3v3j....[/email]
>> Saludos:
>>
>> Esto que preguntas se ha respondido varias veces ya, te diré que
>> empleando un ArrayBrowse para la edición de un registro en la última
>> columna termina siempre, en este caso se aconseja emplear para la
>> edición un formulario MODAL.
>>
>> Mira en el foro privado y verás que hay varias respuestas sobre el tema.
>>
>> José Ramón Castro.
>>
>> Williams Pacheco escribió:
>>> Estimados amigos
>>>
>>> He implementado la edicion en un ArrayBrowse a partir de algunos
>>> ejemplos que he visto aqui en este foro incluyendo la ayuda de Xailer.
>>>
>>> El problema que no logro resolver es evitar que se cancele la edicion
>>> cuando en la ultima columna muestro un mensaje de validacion. El
>>> codigo que muestro abajo funciona bien en la primera columna, es
>>> decir, si la validacion se activa no sale de la edicion, mientras
>>> que en la ultima columna editable de mi browse a pesar de devolver
>>> .F. en el evento OnExit se cancela la edicion del browse.
>>>
>>> He intentado llamar nuevamente al evento ::oGrid:Edit() pero entiendo
>>> que esto no es lo correcto, ademas que no funciona. Me gustaria que
>>> me dieran una mano con este problema
>>>
>>> Gracias y saludos
>>>
>>> Williams Pacheco
>>>
>>>
>>> //---------------------------------------------------------- --------------------
>>>
>>>
>>>
>>> METHOD ColCantidadExit( oSender, oGridEdit, oNextCtl ) CLASS Orders
>>> LOCAL cCodigo, nQtty, aStock, lRetVal := .F.
>>> LOCAL cMsg, aWarehouse, nWarehouse
>>>
>>> nQtty := oSender:Value
>>> cCodigo := ::oGrid:GetValue(1)
>>> nExistencia := 100
>>>
>>> DO CASE
>>> CASE nQtty = 0
>>> MsgStop("Por favor indique la cantidad")
>>> CASE nQtty <= nExistencia
>>> lRetVal := .T.
>>> OTHERWISE
>>> MsgStop("La cantidad indicada no está disponible")
>>> ENDCASE
>>>
>>> RETURN lRetVal
>>>
>>> //---------------------------------------------------------- --------------------
>>>
>>>
>>>
>>> METHOD ColCantidadPostEdit( oSender, Value, lCanceled, nKey ) CLASS
>>> Orders
>>>
>>> IF lCanceled
>>> ::CancelClick()
>>> ELSE
>>> IF !Empty( Value ) .and. !::oGrid:IsMultipleEdit()
>>> oSender:oParent:SetValue( oSender, Value )
>>> ENDIF
>>> ENDIF
>>>
>>> RETURN Nil
>>>
>>> //---------------------------------------------------------- --------------------
>>>
>>>
>>>
>>> METHOD ColPrecioExit( oSender, oGridEdit, oNextCtl ) CLASS Orders
>>> LOCAL lRetVal := .T., nPrice, nQtty
>>>
>>> nPrice := 1500
>>> nQtty := ::oGrid:GetValue(3)
>>> IF nPrice <= 0
>>> MsgStop("Seleccione un precio válido")
>>> oNextCtl := oSender
>>> lRetVal := .F.
>>> ELSE
>>> ::oGrid:SetValue(7, nPrice * nQtty )
>>> ENDIF
>>>
>>> RETURN lRetVal
>>>
>>> //---------------------------------------------------------- --------------------
>>>
>>>
>>>
>>> METHOD ColPrecioPostEdit( oSender, Value, lCanceled, nKey ) CLASS Orders
>>>
>>> IF lCanceled ::CancelClick()
>>> ELSE
>>> IF !Empty( Value ) .and. !::oGrid:IsMultipleEdit()
>>> oSender:oParent:SetValue( oSender, Value )
>>> ENDIF
>>> ENDIF
>>>
>>> RETURN Nil
>>>
Williams Pacheco escribió:
> Gracias Jose Ramon por tu respuesta y tiempo dedicado a ella.
>
> He visto muchos mensajes que hablan de este tema, tanto en el foro
> privado como en este, pero aunque parezca extraño en ninguno vi una
> explicacion clara sobre el tema, de hecho, lo que pude leer generalmente
> dice algo como "esto se ha tratado muchas veces y bla bla bla...
> lea/busque en el foro las respuestas que se han dado..."
Busca en el foro privado poniendo en búsquedas "El OnExit en la última
columna" y si lees el hilo creo que tendrás una respuesta adecuada.
>
> Ahora bien el tema creo que tiene mucha importancia ya que se ha tratado
> tantas veces. A primera vista pareciera que "quisieramos" (y me refiero
> a todos los que hemos hablado sobre este tema) poner al browse a
> trabajar como lo hacia en FW (al que algunos llaman el innombrable) el
> TWBrowse. Se que el modo que emplea Xailer es el correcto porque ofrece
> mas oportunidades al desarrollador y por ende al usuario. En mi caso
> tengo muy claro lo que es trabajar como modal y como mdi, de hecho mi
> aplicacion esta construida explotando al maximo el modelo mdi.
>
> Lo que veo en todo esto, y es una opinion muy personal, que no es muy
> "normal" que un un evento funcione de una forma en las columnas previas
> a la ultima columna editable y que en la ultima sencillamente aborte la
> edicion. La pregunta que me hago es por qué no se aborta tambien la
> edicion en las columna previas?... será porque la multiedicion indica
> que aún quedan columnas editables?... quizas esa sea una respuesta
> razonable, pero si lo fuera asi, como se logra que ese método pudiera
> aplicarse tambien a la ultima columna?...
Después de la explicación veras que es porque no tiene siguiente control
para cargar en el evento <oNextCtl>: Objeto que va a recibir el foco.
>
> Entiendo que debe haber algo que "no muy normal" para que tantas
> personas hayan preguntado sobre el mismo tema. Posiblemente una
> explicacion completa podria ser la solucion. En cualquier caso hay
> maneras de darle la vuelta al asunto, una de ellas seria crear una serie
> de controles Edit que sean los que manejen la informacion y luego
> "alimenten" al grid, pero como puede verse, utilizar el grid solo para
> mostrar informacion sería una lastima por tanto esfuerzo que los
> desarrolladores de Xailer hayan puesto en su construccion.
Quizás lo que debes de usar es un formulario aparte que contenga el
grid, pero que sea ShowModal, en su ejecución y no se cierre mientras no
pulses un botón de aceptar, que supervise que los elementos del grid
sean todos correcto y si alguno, sobre todo el último no lo es se
posicione de nuevo en dicha columna y fila, también puedes hacer que la
edición se realice en un formulario hijo Modal que realice lo mismo que
pretendes hacer en el grid.
Puede que alguno haya implementado algo que sea diferente yo en mi caso
empleo este último método del formulario para editar el contenido del
grid, a no ser que la última columna sea tipo :nEditType:= beLISTBOX
que sé que tendré un valor por defecto.
>
> Una vez mas gracias por tu ayuda Jose Ramon
Gracías a tí.
>
> Saludos
>
> Williams Pacheco
>
>
José Ramón Castro.
> "José Ramón Castro Polinio" <jrcpoli-quitarpara_envio]"@terra.es>
> wrote in message news:[email=4b1bbb24@svctag-j7w3v3j....]4b1bbb24@svctag-j7w3v3j....[/email]
>> Saludos:
>>
>> Esto que preguntas se ha respondido varias veces ya, te diré que
>> empleando un ArrayBrowse para la edición de un registro en la última
>> columna termina siempre, en este caso se aconseja emplear para la
>> edición un formulario MODAL.
>>
>> Mira en el foro privado y verás que hay varias respuestas sobre el tema.
>>
>> José Ramón Castro.
>>
>> Williams Pacheco escribió:
>>> Estimados amigos
>>>
>>> He implementado la edicion en un ArrayBrowse a partir de algunos
>>> ejemplos que he visto aqui en este foro incluyendo la ayuda de Xailer.
>>>
>>> El problema que no logro resolver es evitar que se cancele la edicion
>>> cuando en la ultima columna muestro un mensaje de validacion. El
>>> codigo que muestro abajo funciona bien en la primera columna, es
>>> decir, si la validacion se activa no sale de la edicion, mientras
>>> que en la ultima columna editable de mi browse a pesar de devolver
>>> .F. en el evento OnExit se cancela la edicion del browse.
>>>
>>> He intentado llamar nuevamente al evento ::oGrid:Edit() pero entiendo
>>> que esto no es lo correcto, ademas que no funciona. Me gustaria que
>>> me dieran una mano con este problema
>>>
>>> Gracias y saludos
>>>
>>> Williams Pacheco
>>>
>>>
>>> //---------------------------------------------------------- --------------------
>>>
>>>
>>>
>>> METHOD ColCantidadExit( oSender, oGridEdit, oNextCtl ) CLASS Orders
>>> LOCAL cCodigo, nQtty, aStock, lRetVal := .F.
>>> LOCAL cMsg, aWarehouse, nWarehouse
>>>
>>> nQtty := oSender:Value
>>> cCodigo := ::oGrid:GetValue(1)
>>> nExistencia := 100
>>>
>>> DO CASE
>>> CASE nQtty = 0
>>> MsgStop("Por favor indique la cantidad")
>>> CASE nQtty <= nExistencia
>>> lRetVal := .T.
>>> OTHERWISE
>>> MsgStop("La cantidad indicada no está disponible")
>>> ENDCASE
>>>
>>> RETURN lRetVal
>>>
>>> //---------------------------------------------------------- --------------------
>>>
>>>
>>>
>>> METHOD ColCantidadPostEdit( oSender, Value, lCanceled, nKey ) CLASS
>>> Orders
>>>
>>> IF lCanceled
>>> ::CancelClick()
>>> ELSE
>>> IF !Empty( Value ) .and. !::oGrid:IsMultipleEdit()
>>> oSender:oParent:SetValue( oSender, Value )
>>> ENDIF
>>> ENDIF
>>>
>>> RETURN Nil
>>>
>>> //---------------------------------------------------------- --------------------
>>>
>>>
>>>
>>> METHOD ColPrecioExit( oSender, oGridEdit, oNextCtl ) CLASS Orders
>>> LOCAL lRetVal := .T., nPrice, nQtty
>>>
>>> nPrice := 1500
>>> nQtty := ::oGrid:GetValue(3)
>>> IF nPrice <= 0
>>> MsgStop("Seleccione un precio válido")
>>> oNextCtl := oSender
>>> lRetVal := .F.
>>> ELSE
>>> ::oGrid:SetValue(7, nPrice * nQtty )
>>> ENDIF
>>>
>>> RETURN lRetVal
>>>
>>> //---------------------------------------------------------- --------------------
>>>
>>>
>>>
>>> METHOD ColPrecioPostEdit( oSender, Value, lCanceled, nKey ) CLASS Orders
>>>
>>> IF lCanceled ::CancelClick()
>>> ELSE
>>> IF !Empty( Value ) .and. !::oGrid:IsMultipleEdit()
>>> oSender:oParent:SetValue( oSender, Value )
>>> ENDIF
>>> ENDIF
>>>
>>> RETURN Nil
>>>