Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Deshabilitar ciertas filas TDBGrid (https://www.clubdelphi.com/foros/showthread.php?t=68247)

natalinuyo 02-06-2010 23:16:47

Deshabilitar ciertas filas TDBGrid
 
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 [Germán.Estévez] 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.

Cita:

Empezado por Neftali (Mensaje 366071)
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

Cita:

Empezado por José Luis Garcí (Mensaje 366113)
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 [Germán.Estévez] 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 [Germán.Estévez] 04-06-2010 10:14:34

Cita:

Empezado por Chris (Mensaje 366150)
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

Cita:

Empezado por Neftali (Mensaje 366134)
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.


La franja horaria es GMT +2. Ahora son las 06:33:52.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi