Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 01-06-2006
Alexis De la Cr Alexis De la Cr is offline
Miembro
 
Registrado: may 2006
Ubicación: Puebla
Posts: 124
Poder: 18
Alexis De la Cr Va por buen camino
Cambiar color de fondo en un DBgrid

Estimados Colegas del Foro:

Les molesto con un pequeño problema que tengo, les explico. Tengo una base de datos mysql, con la cual me conecto a traves del componente mydac de crlabs. para hacer actualizaciones al dataset lo hago a traves de un edit box, de tal forma que si hay un cambio en el dataset, automaticamente el fondo del registro actual en el dbgrid, se pone en amarillo. hasta aqui no hay problema. el problema es que para cancelar el cambio o para aplicarlo, debo presionar un boton, justo ahi es cuando deseo que el color del registro actual en el dbgrid, retorne a blanco, en caso de cancelarlo, o de algun otro color en caso de aplicar los cambios. He buscado informacion en toda la red, y no he podido encontrar nada sobre esto. todos los ejmplos hacen referencia unicamente cuando se esta llenado el dbgrid con los datos del dataset, pero ningun ejemplo o informacion respecto a sucesos externos como cuando se presiona un boton.

Gracias por la Ayuda.

Alexis De la Cruz Ascencio
Puebla MExico
Responder Con Cita
  #2  
Antiguo 01-06-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
La verdad no entiendo. Si logras pintarlo de un color (amarillo), ¿cuál es el problema para pintarlo de cualquier otro color deseado, incluido el blanco? Quizá sea bueno que empieces por explicar qué significa eso de "actualizar un dataset a través de un edit box" y qué es exactamente lo que haces en ese momento para poder pintarlo de amarillo.

Así sin más, lo único que se me ocurre decirte es que en el momento en que quieras "pintar" de un color, utilices el método Repaint del DBGrid para forzarlo a que genere el evento OnDrawColumnCell que es el único método que conozco para pintar un DBGrid.

// Saludos
Responder Con Cita
  #3  
Antiguo 01-06-2006
Alexis De la Cr Alexis De la Cr is offline
Miembro
 
Registrado: may 2006
Ubicación: Puebla
Posts: 124
Poder: 18
Alexis De la Cr Va por buen camino
Estimado Roman:
Te agradezco el interes mostrado al contestar mi pregunta. Te explico, tengo una tabla en mysql, la cual contiene como 15 campos. Para facilitarme la navegacion, no trabajo directamente sobre el dbgrid, y los valores de cada campo, los coloco en un edit box respectivamente,( de esta forma puedo ver los 15 campos al mismo tiempo, cosa que trabajando directamente sobre el dbgrid, debo presionar las flechitas hasta que aparezca el campo deseado. en pocas palabras, se pierde tiempo.)

Código Delphi [-]
labelededit1.Text:=myquery1.FieldValues['clave'];
labelededit2.Text:=myquery1.FieldValues['clalt'];
labelededit3.Text:=myquery1.FieldValues['producto'];
labelededit4.Text:=myquery1.FieldValues['mexico'];
labelededit5.Text:=myquery1.FieldValues['puebla'];
labelededit6.Text:=myquery1.FieldValues['dolar'];
labelededit7.Text:=myquery1.FieldValues['ppesos'];
labelededit8.Text:=myquery1.FieldValues['garantia'];
labelededit9.Text:=myquery1.FieldValues['garantiaps'];
labelededit10.Text:=myquery1.FieldValues['ua'];
labelededit13.Text:=myquery1.fieldvalues['porc'];
label9.Caption:=myquery1.FieldValues['mpcr'];

Cuando modifico el valor de un campo hago lo siguiente

Código Delphi [-]
myquery1.Edit;
myquery1.FieldValues['dolar']:=labelededit6.Text;
myquery1.FieldValues['ultmodif']:=DateToStr(Now);
myquery1.Post;

de tal forma que esta accion se refleja en el dbgrid haciendo que el fondo del registro activo se coloree de amarillo, mediante el siguiente codigo en el evento ondrawcolumncell del dbgrid

Código Delphi [-]
if MyQuery1.UpdateResult in [uaFail,uaSkip] then
    TCRDBGrid(Sender).Canvas.Brush.Color:= clRed
  else
    if MyQuery1.UpdateStatus <> usUnmodified then
      begin
      TCRDBGrid(Sender).Canvas.Brush.Color:= clYellow;
      button3.Enabled:=True;
      end;
  TCRDBGrid(Sender).DefaultDrawColumnCell(Rect, Datacol, Column, State);

en este punto yo tengo la opcion (como la tabla esta en modo cachedupdates) de cancelar o de aplicar los cambios, mediante un boton. En Ambos casos, debo hacer un myquery.refreshrecord (antes hacia myquery.refresh y funcionaba perfecto, pero como actualize la version de los componentes mydac, aahora esto me causa un error de access violation), para actualizar los datos. el problema es que el fondo registro en el dbgrid, queda amarillo,y lo que quiero es que si se cancela la actualizacion, el fondo vuelva a su color blanco, y si se procede con applyupdates, dejar otro color distinto para saber que ese registro se actualizo.

Espero no me haya excedido explicando, soy novaton en esto

Gracias de antemano
Responder Con Cita
  #4  
Antiguo 01-06-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
¿Y has probado lo que te digo? En OnDrawColumnCell tu código pinta de amarillo el fondo cuando UpdateStatus <> usUnmodified. Cuando aplicas o cancelas los cambios, es de suponerse que UpdateStatus sea igual usUnmodified (si no es así tendrás que revisar que valor toma para considerarlo en el condicional) y por tanto no se usará el color amarillo. Pero esto puede no reflejarse de inmediato pues OnDrawColumnCell ocurrirá sólo cuando el DBGrid necesita pintarse. Por ello, al momento de aplicar o cancelar los cambios conviene que hagas un DBGrid.Repaint para forzar el repintado.

// Saludos
Responder Con Cita
  #5  
Antiguo 02-06-2006
Alexis De la Cr Alexis De la Cr is offline
Miembro
 
Registrado: may 2006
Ubicación: Puebla
Posts: 124
Poder: 18
Alexis De la Cr Va por buen camino
Hola Roman, muchas gracias por tu respuesta. Pues bien, ya lo intente lo que me dices, pero no sucede nada cuando ejecuto dbgrid.repaint, queda de color amarillo el fondo y no hay forma (al menos las que yo conozco) de quitarle ese color
Responder Con Cita
  #6  
Antiguo 02-06-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
El DBGrid va a pintar exactamente lo que tú le digas. Si el color no cambia es entonces porque UpdateStatus sigue siendo distinto de usUnmodified después de cancelar o modificar. De ser esto tendrás que encontrar otra forma de controlar cuándo va de amarillo.

O bien, aunque no me suena del todo, pon explícitamente el color del canvas en blanco en el else:

Código Delphi [-]
if MyQuery1.UpdateStatus <> usUnmodified then
begin
  TCRDBGrid(Sender).Canvas.Brush.Color:= clYellow;
  button3.Enabled:=True;
end
else
begin
  TCRDBGrid(Sender).Canvas.Brush.Color:= clWhite;
end;

// Saludos
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Cambiar color a DBGrid Esau OOP 7 28-01-2011 22:26:41
RAVE ¿Como cambiar color de fondo segun resultado del query? ach_666 Impresión 0 03-05-2006 00:33:28
Cambiar el color de fondo de varios componentes... alt126 C++ Builder 1 05-02-2005 11:47:41
Cambiar el color de fondo de un TTextBrowser ruina Lazarus, FreePascal, Kylix, etc. 4 26-06-2004 15:52:13
Cambiar Color a un DbGrid UTECYBER OOP 1 03-11-2003 18:29:02


La franja horaria es GMT +2. Ahora son las 10:20:34.


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
Copyright 1996-2007 Club Delphi