Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   2 Dudas con DBGrid. Bloquear, Modificar = Color (https://www.clubdelphi.com/foros/showthread.php?t=55222)

georgejg 10-04-2008 19:40:46

2 Dudas con DBGrid. Bloquear, Modificar = Color
 
hola Nuevamente..

Tenga Dos Dudas con respecto al DBGrid.

1. El DBGrid esta conectado con el DataSource --> Query --> DataBase

Me permite Modificar Los datos, etc.
pero quisiera q si se modifico alguna celda al salir de ella esta cambie el color de la Fuente.

ejemplo en la Comuna1, Celda3 la consulta muestra '123' lo modifican a '321' al salir de la Celda cambien el color de la fuente a 'Rojo'.

Es posible?? :confused:

ahi la Primera duda..
---------------------------------------

2. Como puedo Bloquear una columna del DBGrid ???? :confused:

es decir el Mismo DBGrid muestra informacion en 4 Columnas asi q la idea es la Siguiente:

evitar q puedan acceder a la Columna 4. es decir q esta sea solo de Consulta miestras q en las demas si se pueda editar.

---------------------------------------------------------

Les agradeseco de antemano la antecion prestada

Saludos..

enecumene 10-04-2008 19:57:05

Hola, sobre la segunda duda lo puedes hacer asi:

Código Delphi [-]
DBGrid1.Columna[1].enabled := False;

o

DBGrid1.Columns[1].ReadOnly := True;

Sobre la primera duda debes jugar con los eventos onColEnter, OnColExit y OnDrawColumnCell.

Espero te sirva.

Saludos.

georgejg 10-04-2008 20:55:36

Gracias por responder Enecumene.

con respecto a la Segunda duda seguie el ejemplo de este hilo

q funciono en gran manera.

Pero con respecto a la primera Duda..

no se como validar q los datos de la celda an sido modificados. encontre el siguiente ejemplo:

Código Delphi [-]
 
if (Column.Index = 2) and (Column.Field.Dataset.FieldbyName('PESO').AsInteger < 100) then       
if (gdFocused in State) then
     Begin
         DBGrid1.canvas.brush.color := clBlue;
     end
     else
     Begin
         DBGrid1.Canvas.Font.Color := clRed; 
         DBGrid1.DefaultDrawColumnCell(rect,DataCol,Column,State);
     end;

el cual es colocado en el evento OnDrawColumnCell del DBGrid hace exactamente lo q necesito pero el detalle es q se hace la validacion con un Numero determinado.

Código Delphi [-]
if (Column.Index = 2) and (Column.Field.Dataset.FieldbyName('PESO').AsInteger < 100) then  .........

y yo necesito es validarlo contra lo q trajo el Query asi q no es adecuado.

e intentado modificar la condicion pero no e podido dar con la Solucion

si alguien me puede ayudar se les agradecera en gran manera

Saludos..

egostar 10-04-2008 22:25:13

Hola georgejg

Dejame entender lo que estas comentando, lo que necesitas es que cuando se modifique la columna1 cambie el color de la fila o solo cambie el color de la celda que se modificó ???

Salud OS

keyboy 10-04-2008 22:59:25

No sé si estoy entendiendo. De alguna forma tú lo que quieres es marcar los registros o campos que han sido modificados para que visualmente sea fácil distinguirlos. Pero una vez que te mueves de registro, los cambios se mandan a la base, de manera que realmente ya no hay cambios. Entonces, quizá la opción sería retrasar el envío de cambios usando CachedUpdates o un ClientDataset. En ese caso me parece que puedes hacer uso de las propiedades OldValue y NewValue del TField correspondiente. Si no coinciden es porque el campo se ha modificado. Coincidirán de nuevo una vez que uses ApplyUpdates.

Bye

georgejg 10-04-2008 23:59:19

Gracias por responder ahora les detallo mas la intencion:

tengo un Database --> un Query --> DataSource --> DBGrid conectados.

ahora usando el Query realizo una consulta de los campos PESO, CANTIDAD, PRECIO, TIPO, (a la Tabla1) de mi Base de Datos

El resultado de la consulta me la muestra en DBGrid1 y lo q quiero como dije en el ejemplo (ejemplo en la Comuna1, Celda3 la consulta muestra '123' lo modifican a '321' al salir de la Celda cambien el color de la fuente a 'Rojo'.)

es lo siguiente (Paso a Paso):

1. Genero la Consulta
2. La consulta me Muestra:

Ejemplo....
Columna1 - Columna2 - Columna3 - Columna4

PESO --- CANTIDAD --- PRECIO --- TIPO
12 ------- 210 ----- ---- 23500 ---- 1
15 ------- 120 ----- ---- 4520 ----- 2
18 ------- 31 ----------- 1200 ----- 1
20 ------- 15 ----------- 800 ------ 2

3. Digamos (Ejemplo) q quiero modificar la celda 2 de la columna3 (PRECIO) es decir (4520)

4. Cambio el 4520 por 777 (Es Decir estoy dentro de la Celda)

5. Al Salir de la Celda ya sea usando TAB, el Mouse, El Teclado..etc. quiero q se cambie el color de la fuente a 'Rojo'.
Pero Solo de la Celda que modifique. Las q no e modificado deben quedar con el mismo color q biene por defecto (Negro).

esto como dice keyboy "marcar los registros o campos que han sido modificados para que visualmente sea fácil distinguirlos"

6. Al Darle Clic en el Botton "Guardar Cambios" me guarda los cambios en la BD y me quita el color "Rojo" de los campos editados.

Esto es Basicamente lo q se pretende.

ahora el unico ejemplo q e encontrado con algo mas o menos parecido esta en este hilo que e intentado adecuarlo pero no lo e logrado.

Les agradesco una pronta respuesta

Saludos.


La franja horaria es GMT +2. Ahora son las 13:23:20.

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