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.

TDbNavigator + TDBBrowse

Foro de Xailer profesional en español
Responder
miguel
Mensajes: 364
Registrado: Jue Jul 02, 2009 1:09 pm

TDbNavigator + TDBBrowse

Mensaje por miguel »

Hola,
En el el ejemplo BrwEdit que adjunto, he añadido un TDBNavigator en la
pestaña DataSet, ¿como serí­a lo mas recomendado? para hacer funcionar
en el Browse los botones editar, añadir, eliminar del TDBNavigator.
Saludos. Miguel A. Torrellas
--
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9457
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

TDbNavigator + TDBBrowse

Mensaje por ignacio »

Miguel,
La clase TDBNavigator no está preparada para internamente poner el Browse en
modo edición o modo alta cuando se pulsen los botones correspondientes. La
clase permite gobernar la navegación por el dataset y entrar en edición con
cualquier datacontrol, pero no contempla que al pulsar el botón de editar
entre el Browse en modo edición. De hecho si lo hicieramos así podría tener
consecuencias no deseables, ya que un usuario puede permitir la edición por
celda en un determinado browse, pero sin embargo desear edición en un
formulario aparte cuando se desea editar todo el registro. Cuando hiciese
oDataset:Edit() además de entrar en edición los controles del formulario,
entraría también en edición el browse del formulario anterior. Y
seguramente, para complicarlo aún más, es muy posible que el campo al que
apunta algún DataControl del formulario coincida con el que esté editando
el propio browse. Espero haber sido claro. En definitiva, no lo veo
prudente. Podriamos limitarlo para que sólo entrara en edición el Browse
cuando no haya ningún DataControl enlazado en el DataSet, pero no me
convence. Espero que lo entiendas.
No obstante, y como habrás podido observar el Editor de DBFs hace eso mismo
que deseas, y por lo tanto es posible, pero con un poco de trabajo de
codificación, que es el siguiete:
EN EL CONTROL TDBNAVIGATOR:
// Evento OnClickInsert
METHOD DBNavigatorClickInsert( oSender ) CLASS TFrmDbfView
::oDbBrowse:Append()
oSender:UnLock()
RETURN .F.
// Evento OnClickEdit
METHOD DBNavigatorClickEdit( oSender ) CLASS TFrmDbfView
::oDbBrowse:Edit()
oSender:UnLock()
RETURN .F.
// Evento OnClickUpdate
METHOD DBNavigatorClickUpdate( oSender ) CLASS TFrmDbfView
::oDbBrowse:CancelEdit()
RETURN .F.
EN EL CONTROL TDBBROWSE:
// Evento OnPostEdit
METHOD DbBrowsePostEdit( oSender, lCanceled, nKey ) CLASS TFrmDbfView
::oDbNavigator:Lock()
RETURN Nil
Nota: Los métodos Lock y UnLock que poseen todos los Datacontrol no están
documentados por considerarse de uso interno y son los encargados de
bloquear y desbloquear los controles cuando entran y salen de edición. En el
caso de TDBNavigator dichos métodos se utilizan para habilitar-deshabilitar
los botones de la toolbar según el estado del dataset.
Saludos,
--
Ignacio Ortiz de Zúñiga
http://www.xailer.com
"Miguel A. Torrellas" <miguel@torrellas.net> escribió en el mensaje
news:45f568f4$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
> Hola,
>
> En el el ejemplo BrwEdit que adjunto, he añadido un TDBNavigator en la
> pestaña DataSet, ¿como sería lo mas recomendado? para hacer funcionar
> en el Browse los botones editar, añadir, eliminar del TDBNavigator.
>
> Saludos. Miguel A. Torrellas
>
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
miguel
Mensajes: 364
Registrado: Jue Jul 02, 2009 1:09 pm

TDbNavigator + TDBBrowse

Mensaje por miguel »

Gracias Ignacio,
Extraordinariamente explicito, comparto 100 por 100 toda tu explicación,
ademas con los ejemplos que explicas, todo solucionado.
No termino de entender el uso de TDBNavigator:Lock y UnLock ya haré
pruebas para ver lo que hace.
Saludos. Miguel A. Torrellas
Ignacio Ortiz de Zúñiga escribió:
> Miguel,
>
> La clase TDBNavigator no está preparada para internamente poner el Browse en
> modo edición o modo alta cuando se pulsen los botones correspondientes. La
> clase permite gobernar la navegación por el dataset y entrar en edición con
> cualquier datacontrol, pero no contempla que al pulsar el botón de editar
> entre el Browse en modo edición. De hecho si lo hicieramos así­ podrí­a tener
> consecuencias no deseables, ya que un usuario puede permitir la edición por
> celda en un determinado browse, pero sin embargo desear edición en un
> formulario aparte cuando se desea editar todo el registro. Cuando hiciese
> oDataset:Edit() además de entrar en edición los controles del formulario,
> entrarí­a también en edición el browse del formulario anterior. Y
> seguramente, para complicarlo aún más, es muy posible que el campo al que
> apunta algún DataControl del formulario coincida con el que esté editando
> el propio browse. Espero haber sido claro. En definitiva, no lo veo
> prudente. Podriamos limitarlo para que sólo entrara en edición el Browse
> cuando no haya ningún DataControl enlazado en el DataSet, pero no me
> convence. Espero que lo entiendas.
>
> No obstante, y como habrás podido observar el Editor de DBFs hace eso mismo
> que deseas, y por lo tanto es posible, pero con un poco de trabajo de
> codificación, que es el siguiete:
>
> EN EL CONTROL TDBNAVIGATOR:
>
> // Evento OnClickInsert
> METHOD DBNavigatorClickInsert( oSender ) CLASS TFrmDbfView
> ::oDbBrowse:Append()
> oSender:UnLock()
> RETURN .F.
>
> // Evento OnClickEdit
> METHOD DBNavigatorClickEdit( oSender ) CLASS TFrmDbfView
> ::oDbBrowse:Edit()
> oSender:UnLock()
> RETURN .F.
>
> // Evento OnClickUpdate
> METHOD DBNavigatorClickUpdate( oSender ) CLASS TFrmDbfView
> ::oDbBrowse:CancelEdit()
> RETURN .F.
>
> EN EL CONTROL TDBBROWSE:
>
> // Evento OnPostEdit
> METHOD DbBrowsePostEdit( oSender, lCanceled, nKey ) CLASS TFrmDbfView
> ::oDbNavigator:Lock()
> RETURN Nil
>
> Nota: Los métodos Lock y UnLock que poseen todos los Datacontrol no están
> documentados por considerarse de uso interno y son los encargados de
> bloquear y desbloquear los controles cuando entran y salen de edición. En el
> caso de TDBNavigator dichos métodos se utilizan para habilitar-deshabilitar
> los botones de la toolbar según el estado del dataset.
>
> Saludos,
>
>
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9457
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

TDbNavigator + TDBBrowse

Mensaje por ignacio »

Miguel,
Mira la nota al final de mi anterior mensaje.
Un saludo
--
Ignacio Ortiz de Zúñiga
http://www.xailer.com
"Miguel A. Torrellas" <miguel@torrellas.net> escribió en el mensaje
news:45f5898e$[email=1@news.xailer.com...]1@news.xailer.com...[/email]
> Gracias Ignacio,
>
> Extraordinariamente explicito, comparto 100 por 100 toda tu explicación,
> ademas con los ejemplos que explicas, todo solucionado.
>
> No termino de entender el uso de TDBNavigator:Lock y UnLock ya haré
> pruebas para ver lo que hace.
>
> Saludos. Miguel A. Torrellas
>
> Ignacio Ortiz de Zúñiga escribió:
>> Miguel,
>>
>> La clase TDBNavigator no está preparada para internamente poner el Browse
>> en modo edición o modo alta cuando se pulsen los botones
>> correspondientes. La clase permite gobernar la navegación por el dataset
>> y entrar en edición con cualquier datacontrol, pero no contempla que al
>> pulsar el botón de editar entre el Browse en modo edición. De hecho si lo
>> hicieramos así podría tener consecuencias no deseables, ya que un usuario
>> puede permitir la edición por celda en un determinado browse, pero sin
>> embargo desear edición en un formulario aparte cuando se desea editar
>> todo el registro. Cuando hiciese oDataset:Edit() además de entrar en
>> edición los controles del formulario, entraría también en edición el
>> browse del formulario anterior. Y seguramente, para complicarlo aún más,
>> es muy posible que el campo al que apunta algún DataControl del
>> formulario coincida con el que esté editando el propio browse. Espero
>> haber sido claro. En definitiva, no lo veo prudente. Podriamos limitarlo
>> para que sólo entrara en edición el Browse cuando no haya ningún
>> DataControl enlazado en el DataSet, pero no me convence. Espero que lo
>> entiendas.
>>
>> No obstante, y como habrás podido observar el Editor de DBFs hace eso
>> mismo que deseas, y por lo tanto es posible, pero con un poco de trabajo
>> de codificación, que es el siguiete:
>>
>> EN EL CONTROL TDBNAVIGATOR:
>>
>> // Evento OnClickInsert
>> METHOD DBNavigatorClickInsert( oSender ) CLASS TFrmDbfView
>> ::oDbBrowse:Append()
>> oSender:UnLock()
>> RETURN .F.
>>
>> // Evento OnClickEdit
>> METHOD DBNavigatorClickEdit( oSender ) CLASS TFrmDbfView
>> ::oDbBrowse:Edit()
>> oSender:UnLock()
>> RETURN .F.
>>
>> // Evento OnClickUpdate
>> METHOD DBNavigatorClickUpdate( oSender ) CLASS TFrmDbfView
>> ::oDbBrowse:CancelEdit()
>> RETURN .F.
>>
>> EN EL CONTROL TDBBROWSE:
>>
>> // Evento OnPostEdit
>> METHOD DbBrowsePostEdit( oSender, lCanceled, nKey ) CLASS TFrmDbfView
>> ::oDbNavigator:Lock()
>> RETURN Nil
>>
>> Nota: Los métodos Lock y UnLock que poseen todos los Datacontrol no están
>> documentados por considerarse de uso interno y son los encargados de
>> bloquear y desbloquear los controles cuando entran y salen de edición. En
>> el caso de TDBNavigator dichos métodos se utilizan para
>> habilitar-deshabilitar los botones de la toolbar según el estado del
>> dataset.
>>
>> Saludos,
>>
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Responder