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.
Edición en línea de un TBrowseMod
Edición en línea de un TBrowseMod
Buenas XTeam. Estoy intentando hacer una edición en línea con el browse moderno y me encuentro algunos problemas.
Adjunto ejemplo sencillo modificado sobre los samples de Xailer 9.1 1.- He tomado el ejemplo DBFBrowse y nada mas empezar al anchar el browse en edición, me quedan las cabeceras pintadas fuera de sus columnas.... lo cual me pasa algunas veces también en ejecución. 2.- Después he tomado como base el ejemplo MemBrowse y he permitido edición en línea. Como puede verse las columnas 2 y 3 son nEditType = beNone , pero al entrar en edición las edita todas incluidas estas beNone . 3.- He añadido una columna booleana con un aEditListBound .T./.F. y aEditLIstText Sí/No con nEditType = beLISTBOX y para mi sorpresa necesito hacer uso del evento OnDrawCell para que me muestre los valores de aEditLIstText Sí/No
IF Lower(oCol:oDataField:cName)="directory"
cValue:=IF(xValue,"Sí","No")
Endif
4.- Aún así cuando entro en edición de una línea, el valor mostrado en esa columna por OnDrawCell se vuelve .T./.F. y al abrir la lista de edición entonces es mostrada la lista Sí/No, selecciono una opción, se cierra la lista y vuelve a mostrar .T./.F.
Si encima es una columna con nEditType = beGET_LISTBOX donde puedo teclear para buscar con una S o una N, buscar lo busca bien pero el valor devuelto ya no es de tipo lógico sino de tipo carácter y al ir a grabarlo en una BBDD da error.
5.- Si los valores a mostrar en una columna beLISTBOX son caracteres que tienen un aEditListBound numérico 1,2,3,4,5.... y el primer elemento de aEditLIstText está vacio "" o solo tiene espacios " ", para poder elegir una opción que no indique nada por ejemplo, no hay manera de coger otro valor siempre coge el primero, por eso he puesto un punto en la primera opción de la columna 7 y así funciona.
Muchas gracias por vuestro tiempo y atención.
Adjunto ejemplo sencillo modificado sobre los samples de Xailer 9.1 1.- He tomado el ejemplo DBFBrowse y nada mas empezar al anchar el browse en edición, me quedan las cabeceras pintadas fuera de sus columnas.... lo cual me pasa algunas veces también en ejecución. 2.- Después he tomado como base el ejemplo MemBrowse y he permitido edición en línea. Como puede verse las columnas 2 y 3 son nEditType = beNone , pero al entrar en edición las edita todas incluidas estas beNone . 3.- He añadido una columna booleana con un aEditListBound .T./.F. y aEditLIstText Sí/No con nEditType = beLISTBOX y para mi sorpresa necesito hacer uso del evento OnDrawCell para que me muestre los valores de aEditLIstText Sí/No
IF Lower(oCol:oDataField:cName)="directory"
cValue:=IF(xValue,"Sí","No")
Endif
4.- Aún así cuando entro en edición de una línea, el valor mostrado en esa columna por OnDrawCell se vuelve .T./.F. y al abrir la lista de edición entonces es mostrada la lista Sí/No, selecciono una opción, se cierra la lista y vuelve a mostrar .T./.F.
Si encima es una columna con nEditType = beGET_LISTBOX donde puedo teclear para buscar con una S o una N, buscar lo busca bien pero el valor devuelto ya no es de tipo lógico sino de tipo carácter y al ir a grabarlo en una BBDD da error.
5.- Si los valores a mostrar en una columna beLISTBOX son caracteres que tienen un aEditListBound numérico 1,2,3,4,5.... y el primer elemento de aEditLIstText está vacio "" o solo tiene espacios " ", para poder elegir una opción que no indique nada por ejemplo, no hay manera de coger otro valor siempre coge el primero, por eso he puesto un punto en la primera opción de la columna 7 y así funciona.
Muchas gracias por vuestro tiempo y atención.
BiSoft Desarrollo de software profesional
http://www.bisoft.es
http://www.bisoft.es
- ignacio
- Site Admin
- Mensajes: 9320
- Registrado: Lun Abr 06, 2015 8:00 pm
- Ubicación: Madrid, Spain
- Contactar:
Re: Edición en línea de un TBrowseMod
1) No consigo reproducirlo.
2) Con este código debería corregirse:
3) aEDIT... Nada tiene que ver con la visualización. OnDrawCell es necesario.
4) la edición se basa en el tipo de dato, en este caso lógico y se comporta exactamente igual que un TMaskEdit de tipo lógico. Recomiendo pasar la columna a texto.
5) Lo miro con más detenimiento
Saludos
2) Con este código debería corregirse:
Código: Seleccionar todo
METHOD Edit() CLASS XDbBrwColMod
::Super:Edit()
IF ::oDataset == NIL .OR. !::IsDataField()
::oGridEdit:lReadOnly := .T.
ENDIF
RETURN NIL
4) la edición se basa en el tipo de dato, en este caso lógico y se comporta exactamente igual que un TMaskEdit de tipo lógico. Recomiendo pasar la columna a texto.
5) Lo miro con más detenimiento
Saludos
- ignacio
- Site Admin
- Mensajes: 9320
- Registrado: Lun Abr 06, 2015 8:00 pm
- Ubicación: Madrid, Spain
- Contactar:
Re: Edición en línea de un TBrowseMod
Buenas tardes,
Me ha parecido una buena idea de la que se tengan en cuenta los valores de aEditList???? para la visualización y ya está hecho. Hay que cambiar el siguiente código a partir de la línea 3847 de BrowseMod.prg:
De esta forma ya no es necesario sobrecargar OnDrawCell.
El error de no poder usar espacios en aEditListText se soluciona con el siguiente código (se ha cambiado un '=' por un '=='):
Este arreglo, también evita que se muestre .T. o .F. en la edición. No obstante, hay que hacer un arreglo adicional para cuando se introducen a mano valores en el campo que no coinciden con ninguno de la lista, que es:
Todos estas correcciones se incluirán en la próxima revisión de Xailer, que será en breve.
Un saludo
Me ha parecido una buena idea de la que se tengan en cuenta los valores de aEditList???? para la visualización y ya está hecho. Hay que cambiar el siguiente código a partir de la línea 3847 de BrowseMod.prg:
Código: Seleccionar todo
IF ValType( xValue ) $ "NL" .AND. !Empty( :aEditListBound ) .AND. ( nIdx := AScan( :aEditListBound, xValue ) ) > 0 // Nueva línea
cValue := :aEditListText[ nIdx ] // Nueva línea
ELSEIF xValue != NIL .AND. !Empty( :cPicture ) // Convertido de IF a ELSEIF
cValue := Transform( xValue, :cPicture )
ELSE
cValue := ToString( xValue )
ENDIF
El error de no poder usar espacios en aEditListText se soluciona con el siguiente código (se ha cambiado un '=' por un '=='):
Código: Seleccionar todo
METHOD SaveValue() CLASS TEditForGrid
LOCAL xValue, nIndex
xValue := ::Value()
IF ::lTypeChanged .AND. ValType( xValue ) == "C"
xValue := Trim( Upper( XA_NoAccents( xValue ) ) )
nIndex := AScan( ::oCol:aEditListText, {|v,e| xValue == Trim( Upper( XA_NoAccents(v) ) ) } )
IF nIndex > 0 .AND. nIndex <= Len( ::oCol:aEditListBound )
xValue := ::oCol:aEditListBound[ nIndex ]
ELSE
xValue := 0
ENDIF
ENDIF
RETURN xValue
Código: Seleccionar todo
METHOD SetValue( xValue ) CLASS XDbBrwColMod
IF ::IsDataField()
IF ValType( xValue ) == ::oDataField:cType
::oDataField:Value := xValue
ENDIF
ENDIF
RETURN xValue
Un saludo
- ignacio
- Site Admin
- Mensajes: 9320
- Registrado: Lun Abr 06, 2015 8:00 pm
- Ubicación: Madrid, Spain
- Contactar:
Re: Edición en línea de un TBrowseMod
¿Has podido probar algo? Gracias
Un saludo
Un saludo
Re: Edición en línea de un TBrowseMod
Perdona el retraso Ignacio, andamos como locos.
Probé las modificaciones propuestas en mi aplicación y me funcionó a medias.
Implemento las correcciones en vuestro samples y lo veré mejor para explicártelo, me voy a poner ahora mismo con ello que parece una tarde tranquila.
ADJUNTO el ejemplo MemBrowse con todas las modificaciones sugeridas para que puedas probarlo.
Muchas gracias.
Probé las modificaciones propuestas en mi aplicación y me funcionó a medias.
Implemento las correcciones en vuestro samples y lo veré mejor para explicártelo, me voy a poner ahora mismo con ello que parece una tarde tranquila.
ADJUNTO el ejemplo MemBrowse con todas las modificaciones sugeridas para que puedas probarlo.
Muchas gracias.
Última edición por bingen el Jue Oct 31, 2024 6:25 pm, editado 1 vez en total.
BiSoft Desarrollo de software profesional
http://www.bisoft.es
http://www.bisoft.es
Re: Edición en línea de un TBrowseMod
Sobre las columnas 2 y 3 con :nEditType := beNONE la solución que propones
IF ::oDataset == NIL .OR. !::IsDataField()
::oGridEdit:lReadOnly := .T.
ENDIF
no resuelve mi problema ya que en mi caso es un dataset y es un campo del dataset lo que se muestra, como en vuestro sample MemBrowse que adjunto, pero si añado lo siguiente si que funciona mucho mejor
IF ::oDataset == NIL .OR. !::IsDataField() .Or. ::nEditType = beNONE
::oGridEdit:lReadOnly := .T.
ENDIF Pero entra en cada celda de cada columna 2 y 3 aunque no deja editarla.
Si añado
IF ::oDataset == NIL .OR. !::IsDataField() .Or. ::nEditType = beNONE
::oGridEdit:lReadOnly := .T.
::oGridEdit:lTabStop:=.F.
ENDIF
Las columnas 2 y 3 quedan en gris y no se pueden editar pero... al pulsar el tabulador pasa por todas las columnas con lTabStop:=.F. o sea no pasa de la primera a la cuarta como sería lógico.
IF ::oDataset == NIL .OR. !::IsDataField()
::oGridEdit:lReadOnly := .T.
ENDIF
no resuelve mi problema ya que en mi caso es un dataset y es un campo del dataset lo que se muestra, como en vuestro sample MemBrowse que adjunto, pero si añado lo siguiente si que funciona mucho mejor
IF ::oDataset == NIL .OR. !::IsDataField() .Or. ::nEditType = beNONE
::oGridEdit:lReadOnly := .T.
ENDIF Pero entra en cada celda de cada columna 2 y 3 aunque no deja editarla.
Si añado
IF ::oDataset == NIL .OR. !::IsDataField() .Or. ::nEditType = beNONE
::oGridEdit:lReadOnly := .T.
::oGridEdit:lTabStop:=.F.
ENDIF
Las columnas 2 y 3 quedan en gris y no se pueden editar pero... al pulsar el tabulador pasa por todas las columnas con lTabStop:=.F. o sea no pasa de la primera a la cuarta como sería lógico.
BiSoft Desarrollo de software profesional
http://www.bisoft.es
http://www.bisoft.es
Re: Edición en línea de un TBrowseMod
En cuanto a usar los valores de aEditListtext directamente sin tener que emplear OnDrawCell perfecto. Pero a pesar de que comentas que esto también evita que se muestre .T. o .F. en la edición, es lo que se sigue viendo
en edición:
BiSoft Desarrollo de software profesional
http://www.bisoft.es
http://www.bisoft.es
Re: Edición en línea de un TBrowseMod
El arreglo adicional para cuando se introducen los valores a mano en el campo funciona perfecto.
BiSoft Desarrollo de software profesional
http://www.bisoft.es
http://www.bisoft.es
Re: Edición en línea de un TBrowseMod
He pulsado la tecla insert sobre el browse y me da este error
Curiosamente no veo la propiedad lAllowInsert en el inspector de objetos para activarlo/desactivarlo al contrario que lAllowAppend que si está. En el manual salen ambas y parecen lo mismo salvo que el caso de lAllowInsert advierte que es para Arrays y en mi caso no lo es pero aunque active lAllowAppend := .t. sigue dando el mismo error.
Muchas gracias.
Curiosamente no veo la propiedad lAllowInsert en el inspector de objetos para activarlo/desactivarlo al contrario que lAllowAppend que si está. En el manual salen ambas y parecen lo mismo salvo que el caso de lAllowInsert advierte que es para Arrays y en mi caso no lo es pero aunque active lAllowAppend := .t. sigue dando el mismo error.
Muchas gracias.
BiSoft Desarrollo de software profesional
http://www.bisoft.es
http://www.bisoft.es
- ignacio
- Site Admin
- Mensajes: 9320
- Registrado: Lun Abr 06, 2015 8:00 pm
- Ubicación: Madrid, Spain
- Contactar:
Re: Edición en línea de un TBrowseMod
Buenos días,
Me temo que no consigo reproducir tus errores. Adjunto vídeo con tu ejemplo:
No sé si el el caso, pero es importante que las pruebas las hagas SIN NINGUNA MODIFICACION en las clases involucradas.
Saludos
Me temo que no consigo reproducir tus errores. Adjunto vídeo con tu ejemplo:
No sé si el el caso, pero es importante que las pruebas las hagas SIN NINGUNA MODIFICACION en las clases involucradas.
Saludos
- ignacio
- Site Admin
- Mensajes: 9320
- Registrado: Lun Abr 06, 2015 8:00 pm
- Ubicación: Madrid, Spain
- Contactar:
Re: Edición en línea de un TBrowseMod
Este error ya está corregido. Simplemente hay que pasar la DATA a RESERVEDbingen escribió: ↑Jue Oct 31, 2024 6:21 pm He pulsado la tecla insert sobre el browse y me da este error
Error.jpg
Curiosamente no veo la propiedad lAllowInsert en el inspector de objetos para activarlo/desactivarlo al contrario que lAllowAppend que si está. En el manual salen ambas y parecen lo mismo salvo que el caso de lAllowInsert advierte que es para Arrays y en mi caso no lo es pero aunque active lAllowAppend := .t. sigue dando el mismo error.
Muchas gracias.
Código: Seleccionar todo
CLASS XDbBrowseMod FROM TBrowseMod
RESERVED:
PROPERTY lAllowInsert INIT .F.
Re: Edición en línea de un TBrowseMod
Pues el comportamiento es realmente diferente al de tu video
Como ves he metido en el ZIP las clases modificadas con tus sugerencias, cuando dices las clases sin ninguna modificación no entiendo, sin modificaciones no hay cambios y de hecho alguna de las cosas ha corregido algún comportamiento.
Pero sigo perplejo a mi no me funciona como a ti.... tendrás mas cambios que yo en las clases.
No se si me puedes pasar las clases modificadas para que las pruebe.
Gracias.
Como ves he metido en el ZIP las clases modificadas con tus sugerencias, cuando dices las clases sin ninguna modificación no entiendo, sin modificaciones no hay cambios y de hecho alguna de las cosas ha corregido algún comportamiento.
Pero sigo perplejo a mi no me funciona como a ti.... tendrás mas cambios que yo en las clases.
No se si me puedes pasar las clases modificadas para que las pruebe.
Gracias.
BiSoft Desarrollo de software profesional
http://www.bisoft.es
http://www.bisoft.es
- ignacio
- Site Admin
- Mensajes: 9320
- Registrado: Lun Abr 06, 2015 8:00 pm
- Ubicación: Madrid, Spain
- Contactar:
Re: Edición en línea de un TBrowseMod
Buenas tardes,
Contacta por privado por favor.
Un saludo
Contacta por privado por favor.
Un saludo