![]() |
Retroceder Celdas en DbGrid
Estoy usando un dbGrid, el problema que tengo es que al salir de una celda, cuando el valor de dicha celda es incorrecto y quiero que el enfoque se devuelva a esta misma celda en vez de que pase a la siguiente, no me obedece el dbGrid ó bien no se con cual otra instrucción se podrá hacer para mandar un enfoque por celdas, lo hago en el evento "OnColExit" con esta instrucción:
gridFac.SelectedIndex:=<Numero de Celda>; Gracias...!!!! |
Puedes más bien usar el evento OnValidate del campo. Si en dicho evento usas abort o lanzas una excepción el foco no se moverá de celda.
// Saludos |
oki
Muchas Gracias Sr. Roman.... Me funciono. le debo otra :)
|
????
Sr. Roman, ahora tengo este problema, quiero convertir el campo "Clave" a mayusculas y al quererlo hacer en el evento OnValidate me marca Error de desbordamiento de pila, hace llamadas recursivas si asigno valores al mismo campo en ese evento, por lo que no encuentro en donde hacer esa conversión, que me sugiere que haga????
|
Para validaciones, comprobaciones y demás, yo te aconsejo usar el evento BeforePost del Dataset
Edito: Eso sí, hasta que no se valida el registro, no se hacen comprovaciones, por lo que a lo mejor no te sirve la idea para lo que tu querías :rolleyes: |
????
Gracias por su respuesta, pero no es a lo que me refiero, lo que pasa es que en las celdas del DbGrid ó bien en las propiedades del Campo de un dataset, no tienen alguna propiedad para convertir de minusculas a mayusculas conforme se este escribiendo algo ó bien cuando se termine de escribir, quiero encontrar en don de puedo hacer eso para que antes de que la aplicación mande activar el evento OnValidate del campo ya vaya con el Dato en MAYUSCULAS, me explico????, de antemano Gracias.....
|
Sí, te explicas, pero sigo pensando que puedes usar el BeforePost e, incluso, el OnValidate de la siguiente manera:
Sabemos que cada vez que se produce un cambio en el contenido del Field, se dispara ese evento, no? Pues bien, hacemos que sólo se nos dispare 1 vez
Con esto, la primera vez que entre se hará el UpperCase del contenido del campo, lo que hará disparar de nuevo el evento. Pero la segunda vez que entra, al ser el contenido igual, ya no se modificará su contenido por lo que no volverá a disparar el evento y se desharán las llamadas recursivas creadas Espero te sirva |
Creo que el evento adecuado para este tipo de manipulaciones es OnSetText del TField.
El OnValidate es adecuado para hacer validaciones, de manera que pueda producirse un error si el valor no es adecuado, pero no para hacer una Re-asignación del field. Saludos. ;) |
???
También servirá cuando surja un Error ó cuando quiera que no cambie de celdas el dbGrid ????
Como por ejemplo cuando el Articulo no exista, hacer que no avance de celda, así como se hace en el OnValidate al mandar un "Abort", será la misma instrucción para el evento que usted me dice???? |
De acuerdo con jachguate. El evento más adecuado es OnSetText que está precisamente para eso, para hacer conversiones del dato que se guardará en la tabla.
Claro que lo ideal es que el DBGrid tuviera la propiedad CharCase al igual que los Edits de manera que el texto aparezca en mayúsculas al momento de irlo escribiendo. Pero podemos lograrlo con un par de trucos sucios:
// Saludos |
Hola Agag.
Claro que el OnSetText no te servira para esto. Pero.... estas mezclando la lógica. Un asunto es mantener todo en mayúsculas, y otro muy diferente validar que un artículo (o cualquier otro dato relacionado) dado exista en la base de datos. Para ello si has de valerte del OnValidate. Hasta luego. ;) |
okii
Muchas Gracias a los dos por sus respuestas.... Lo voy a probar.
|
oki
Gracias Sr. Roman, Sr. Cadeti, me funcionaron sus "trucos", y Gracias Sr. Jachguate por sus comentarios del OnValidate.... Les debo otra.
|
La franja horaria es GMT +2. Ahora son las 06:38:56. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi