Ver la Versión Completa : Deshabilitar ciertas filas TDBGrid
natalinuyo
02-06-2010, 23:16:47
Hola a todos,
He buscado pero no he encontrado hasta el momento algo que soluciones mi problema.
El asunto es que tengo un DBGrid el cual lleno con un query :rolleyes: (obvio) en el cual solo ciertas filas deben tener la opcion de editar, o mejor dicho quiero poner ciertas filas en ReadOnly para que no modifiquen los datos de las mismas.
Esto lo hago en base a ciertas validaciones del mismo query.
Hasta el momento solo he encontrado como deshabilitar columnas y el grid completo, pero pues eso no es lo que necesito.
Espero que me haya dado a entender y que me puedan ayudar en este pequeño dilema.
Saludos a Todos y gracias.
Neftali
03-06-2010, 10:11:12
No lo he probado, pero supongo que si en los eventos de OnDrawCell (o similares) puedes consultar los valores (del Grid) para pintar de un color u otro, también se deberían poder hacer otro tipo de operaciones como deshabilitar la edición.
Es este caso además de los valores deberás tener en cuenta que sea la línea que estés editando (revisa el estado -selected, focused,...-)
natalinuyo
03-06-2010, 16:45:42
Gracias Neftali por la respuesta.
No lo he probado, pero supongo que si en los eventos de OnDrawCell (o similares) puedes consultar los valores (del Grid) para pintar de un color u otro, también se deberían poder hacer otro tipo de operaciones como deshabilitar la edición.
Ya he intentado hacerlo de esa forma y no he tenido exito, y sigo sin encontrar una solucion.
Saludos
José Luis Garcí
03-06-2010, 17:52:09
Estoy de acuerdo con Neftali si añades un campo al grid para saber si el registro debe editase o no, o según la condición/valor de un determinado campo de tu querry/tabla en el OnDrawCell y Datacell (no me acuerdo exactamente del nombre del evento) solo tendrías que hacer un if then, o con un else, si la condición/campo no se cumple haz lo que tengas que hacer, podrías dejarlo así, o poner lo contrario, también puedes optar, por al posicionarte sobre un registro, al darle enter o Click cambiar la propiedad readonly, según la Condición/campo.
natalinuyo
03-06-2010, 19:40:26
Estoy de acuerdo con Neftali si añades un campo al grid para saber si el registro debe editase o no, o según la condición/valor de un determinado campo de tu querry/tabla en el OnDrawCell y Datacell (no me acuerdo exactamente del nombre del evento) solo tendrías que hacer un if then, o con un else, si la condición/campo no se cumple haz lo que tengas que hacer, podrías dejarlo así, o poner lo contrario, también puedes optar, por al posicionarte sobre un registro, al darle enter o Click cambiar la propiedad readonly, según la Condición/campo.
Ese no es mi problema, ya lo tenia, el punto es que requiero que me digan la instrucción, la linea que debo usar para que funcione bien.
He usado ReadOnly al campo, pero aplica la condicion a todo el grid, no solo a la fila.
Saludos
Neftali
03-06-2010, 21:01:00
No hay propiedad del Grid que evite la edición; No la busques porque no la vas a encontar. Lo que intentaba decirte yo, es que si consigues llegar a detectar, tendrás que aplicar alguna lógica sobre el Dataset.
Normalmente cuando alguien intenta editar una fila, saltan eventos en el DataSet asociado al Grid. En esos eventos debes "cancelar" la edición en los casos en los que te interese.
No se si me explico. El Grid te puede servir para pintar las filas diferente o para hacerles alguna marca y "avisar" de que son de sólo lectura. Pero el bloqueo real debes hacerlo desde el Dataset cuando el usuario intenta editar una fila en concreto.
Chris
04-06-2010, 02:35:15
Creo que el objeto TDBColumnGrid tiene las propiedad de ReadOnly. Para acceder a este objeto necesitaras especificar las columas que tendra tu Grid y a que campo del Query pertenece cada una respectivamente. Lo anterior lo puedes hacer en tiempo de diseño o bien lo puedes hacer mediante código.
Si no es así, puedes probar con TDBGrids más avanzados, como por ejemplo el que trae los JEDI components que son gratuitos.
Saludos
Neftali
04-06-2010, 10:14:34
Creo que el objeto TDBColumnGrid tiene las propiedad de ReadOnly.
El problemas es que desea poner filas, y no columnas.
Ahora, otra opción sería actvar y desactivar la columna entera (por código) dependiendo de la fila donde te encuentres, pero no me parece un sistema muy ortodoxo.
natalinuyo
04-06-2010, 16:06:38
tendrás que aplicar alguna lógica sobre el Dataset.
Normalmente cuando alguien intenta editar una fila, saltan eventos en el DataSet asociado al Grid. En esos eventos debes "cancelar" la edición en los casos en los que te interese.
Gracias Neftali, ahora si ya te entendí, lo intentaré de esa forma gracias.
En cuanto al uso de otro componente (recientemente lo he instalado, pero no lo he utilizado) seria factible si fuera un proyecto nuevo, jeje, pero este ya tiene demasiado :eek:
Gracias a todos por las ideas, veremos como resuelvo este asunto.
vBulletin v3.6.8, Derechos ©2000-2013, Jelsoft Enterprises Ltd.