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 18-11-2005
Avatar de Cabanyaler
Cabanyaler Cabanyaler is offline
Miembro
 
Registrado: jun 2003
Ubicación: País Valencià
Posts: 339
Poder: 21
Cabanyaler Va por buen camino
RXDBGrid.OnDrawColumnCell

Hola amigos, una consulta más.

Quiero visualizar en un DBGrid datos referentes a tuplas de una tabla. Entre otros existen campos de tipo fecha y algunas tuplas continen en fecha almacenado el dato '01/01/1900'.
Mi objetivo es no visualizar esas fechas en la columna destinada a este atributo, pero si todas aquellas que tengan fecha diferente a 01/01/1900.

Para ello he hecho este código.

Código Delphi [-]
procedure TFPrincipal.RxDBGridAlbaranDrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
begin
        if (RxDBGridAlbaran.Columns[4] = Column) then
           if(DMInstalgas.ADOSP_AlbaranesFecAlb_Alb.AsString = '01/01/1900') then
           begin
              DMInstalgas.ADOSP_Albaranes.Edit;
              RxDBGridAlbaran.Fields[4].Value := NULL;
           end;
end;

Pero el programa se me queda como colgado y como parpadeante dicho RXDBGrid.

¿Sabríais decirme porqué? o ¿como hacerlo?.

Gracias.
__________________
El meu país és tan petit, que des de dalt d'un campanar es pot veure el campanar veí.
Responder Con Cita
  #2  
Antiguo 18-11-2005
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Se te queda colgado porque te está entrando en un buble; Me da la impresión de que al pintar el DBGrid estás modificando el registro, cosa que seguramente te volverá a repintar el DBGrid y así sucesivamete. Creo que no es el lugar ni el modo de hacerlo.

Si lo que quieres es que la fecha no se vea, pues modifica "el pintado" de la celda, pero no modifiques el registro. Y si lo que quieres es modificar el registro, no creo que un evento de pintado de celdas sea el más adecuado.

Haz una búsqueda en los foros por el evento OnDrawColumnCell y seguro que encuentras ejemplos de cómo pintar la celda, pero repito creo que modificar el registro ahí es un grave error.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 18-11-2005
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
No creo que ésta sea una cuestión que se resuelva con dibujo. Yo me fijaría quizá en el evento OnGetText del TField correspondiente, o bien hacer un campo calculado que devuelva la fecha si es distinta de '01/01/1900' y blanco en caso de coincidir.

// Saludos
Responder Con Cita
  #4  
Antiguo 18-11-2005
Avatar de Cabanyaler
Cabanyaler Cabanyaler is offline
Miembro
 
Registrado: jun 2003
Ubicación: País Valencià
Posts: 339
Poder: 21
Cabanyaler Va por buen camino
Ufff, Viernes y calentándome el coco..., menos mal que cobro una pasta!!! (No hay emoticono de descojono tirado por el suelo).

Cita:
Si lo que quieres es que la fecha no se vea, pues modifica "el pintado" de la celda, pero no modifiques el registro. Y si lo que quieres es modificar el registro, no creo que un evento de pintado de celdas sea el más adecuado
He estado mirando como hacer eso y no lo he averiguado, ¿me puedes decir como escribir el dato que yo quiera en la columna del DBGrid que quiera?.

Gracias.
__________________
El meu país és tan petit, que des de dalt d'un campanar es pot veure el campanar veí.

Última edición por Cabanyaler fecha: 18-11-2005 a las 18:12:54.
Responder Con Cita
  #5  
Antiguo 18-11-2005
Avatar de Cabanyaler
Cabanyaler Cabanyaler is offline
Miembro
 
Registrado: jun 2003
Ubicación: País Valencià
Posts: 339
Poder: 21
Cabanyaler Va por buen camino
Tambien he intentado esto propuesto
Cita:
Yo me fijaría quizá en el evento OnGetText del TField
pero, no sé
He mirado el evento asociado a los campos del Grid, pero no existe ese evento.
¿Sobre que objeto se aplica ese evento?
Gracias y buen fin de semana.
__________________
El meu país és tan petit, que des de dalt d'un campanar es pot veure el campanar veí.
Responder Con Cita
  #6  
Antiguo 18-11-2005
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por Cabanyaler
...He estado mirando como hacer eso y no lo he averiguado, ¿me puedes decir como escribir el dato que yo quiera en la columna del DBGrid que quiera?.
Una simpe búsqueda en los foros y llegas aquí (por ejemplo, a éste, porque hay muchos más...)
http://www.clubdelphi.com/foros/showthread.php?t=16818


Cita:
Empezado por Cabanyaler
...He mirado el evento asociado a los campos del Grid, pero no existe ese evento. ¿Sobre que objeto se aplica ese evento?
En el TTable/TQuery/... asociado al DbGrid, pulsa click derecho y obtén los campos del DataSet. En el campo que deses programa el evento comentado.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #7  
Antiguo 18-11-2005
Avatar de Cabanyaler
Cabanyaler Cabanyaler is offline
Miembro
 
Registrado: jun 2003
Ubicación: País Valencià
Posts: 339
Poder: 21
Cabanyaler Va por buen camino
Gracias, el próximo Lunes tomo el asunto.
Buen fin de semana y a descansar.
__________________
El meu país és tan petit, que des de dalt d'un campanar es pot veure el campanar veí.
Responder Con Cita
  #8  
Antiguo 21-11-2005
Avatar de Cabanyaler
Cabanyaler Cabanyaler is offline
Miembro
 
Registrado: jun 2003
Ubicación: País Valencià
Posts: 339
Poder: 21
Cabanyaler Va por buen camino
Ya está, a veces las cosas son más sencillas de lo que parecen:
No he escrito lo que queria en el DBGrid, ya que esto suponia escribir en los datos directamente del Dataset, simplemente para no ver lo que no quiero igualo el color de la fuente con el del fondo, de ese modo no se vé.
Gracias a todos y un saludo.

Código Delphi [-]
procedure TFPrincipal.RxDBGridPagosObraDrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
begin
        if (RxDBGridPagosObra.Columns[8] = Column) then
           if(DMInstalgas.ADOSP_PagosRegFac_Pag.AsString = '01/01/1900') then
           begin
              RxDBGridPagosObra.Canvas.Font.Color := RxDBGridAlbaran.Color;
           end;
        RxDBGridPagosObra.DefaultDrawColumnCell(rect,DataCol,Column,State);
end;
__________________
El meu país és tan petit, que des de dalt d'un campanar es pot veure el campanar veí.
Responder Con Cita
  #9  
Antiguo 21-11-2005
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Aunque hay un viejo provervio informático que dice "...si funciona, ¡¡NO LO TOQUES!!", creo que vale la pena que pruebes el método que te comenta Roman del GetText (aunque el que comentas ya te funciona); Es más eficiente, que no volver a dibujar toda la celda.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #10  
Antiguo 22-11-2005
Avatar de Cabanyaler
Cabanyaler Cabanyaler is offline
Miembro
 
Registrado: jun 2003
Ubicación: País Valencià
Posts: 339
Poder: 21
Cabanyaler Va por buen camino
Si, gracias, ya lo he mirado, pero aplicaré el corolario
La ventaja que presenta el evento OnGetText frente a tratamiento del Canvas, es que el campo se visualizará del modo establecido en el evento OnGetText en cualquier lugar donde lo visualices, mientras en el OnDrawColumnCell, sólo se aplicará al Grid que lo posee.
Gracias a todos.
__________________
El meu país és tan petit, que des de dalt d'un campanar es pot veure el campanar veí.

Última edición por Cabanyaler fecha: 22-11-2005 a las 09:07:47.
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


La franja horaria es GMT +2. Ahora son las 01:17:33.


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