Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 06-06-2003
Sóstrato Sóstrato is offline
Miembro
 
Registrado: may 2003
Posts: 13
Poder: 0
Sóstrato Va por buen camino
Campos en DBGrid que no pertenecen al DataSource (sin FieldName)

Hola a todos!,
tengo dos campos (columns) que no tienen FieldName porque pretendo que tomen valor de un mismo campo dependiendo si este es positivo o negativo. Mi preguntas es, como le asigno esos valores a las columnas del DBGrid que no tienen FieldName?.
__________________
Sóstrato Vásquez
www.adidesa.com
Responder Con Cita
  #2  
Antiguo 06-06-2003
andres1569 andres1569 is offline
Miembro
 
Registrado: may 2003
Posts: 908
Poder: 22
andres1569 Va por buen camino
Una opción es asignar el FielName a ambas columnas y ocultar la aparición del valor interceptando el evento OnDrawColumnCell del DBGrid. Aquí va un ejemplito:

Código:
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
  if Column.Field.FieldName = 'SubTotal' then
  with DBGrid1.Canvas do
  begin
    if gdSelected in State then Brush.Color := clHighLight
    else Brush.Color := clWhite;
    if ((Column.Field.AsCurrency >= 0) AND (Column.Index = 7)) OR
       ((Column.Field.AsCurrency < 0) AND (Column.Index = 8)) then
       FillRect (Rect);
  end;
end;
En este ejemplo, Column.Index te sirve para saber de qué columna se trata en cada caso. Si se cumple la condición se pinta el fondo de dicha celda y aparece en "blanco".
__________________
Guía de Estilo
Responder Con Cita
  #3  
Antiguo 06-06-2003
Sóstrato Sóstrato is offline
Miembro
 
Registrado: may 2003
Posts: 13
Poder: 0
Sóstrato Va por buen camino
Muy bien... excelente!...
perdona la ignorancia, pero... en estos campos tengo que aceptar valores!... debo protejer uno de ellos (el mismo FieldName) al momento de aceptar valores... como manejaria esto?
__________________
Sóstrato Vásquez
www.adidesa.com
Responder Con Cita
  #4  
Antiguo 06-06-2003
andres1569 andres1569 is offline
Miembro
 
Registrado: may 2003
Posts: 908
Poder: 22
andres1569 Va por buen camino
Ufff!! Eso es harina de otro costal.

Puesto que las dos columnas apuntan al mismo campo, ¿no te parece suficiente que puedan escribir en ambas indistintamente? En el momento que graben el dato, desaparecerá de la columna correspondiente. Pruébalo a ver si te sirve.
__________________
Guía de Estilo
Responder Con Cita
  #5  
Antiguo 06-06-2003
Sóstrato Sóstrato is offline
Miembro
 
Registrado: may 2003
Posts: 13
Poder: 0
Sóstrato Va por buen camino
OK, hare lo siguiente, en el Onvalidate del campo que esta siendo utilizado en las dos columnas controlare el valor positivo o negativo introducido.

Gracias mi hermano.
__________________
Sóstrato Vásquez
www.adidesa.com
Responder Con Cita
  #6  
Antiguo 06-06-2003
andres1569 andres1569 is offline
Miembro
 
Registrado: may 2003
Posts: 908
Poder: 22
andres1569 Va por buen camino
Hola de nuevo:

No creo que se trate de controlar el evento OnValidate del campo en cuestión, puesto que eso es actuar a nivel de Tabla, y lo otro es a nivel de DBGrid, deben separarse ambas cosas y supongo que la tabla la tienes en un DataModule y el DBGrid en un Form. Además, lo que hicieras en el OnValidate ¿cómo repercutiría en la visualización del DBGrid si ambas columnas apuntan al mismo campo?
__________________
Guía de Estilo
Responder Con Cita
  #7  
Antiguo 06-06-2003
Sóstrato Sóstrato is offline
Miembro
 
Registrado: may 2003
Posts: 13
Poder: 0
Sóstrato Va por buen camino
Tienes toda la razon, solo queda una solucion... usar una sola columna con su FieldName. Parece ser quien diseño la tabla desarrollaba en cobol y quiso ahorarce un campo. Creo un campo Monto si es negativo es credito y positivo es debito.
__________________
Sóstrato Vásquez
www.adidesa.com
Responder Con Cita
  #8  
Antiguo 06-06-2003
andres1569 andres1569 is offline
Miembro
 
Registrado: may 2003
Posts: 908
Poder: 22
andres1569 Va por buen camino
Hola:

Aquí les llamamos Debe y Haber y en mi caso los implementé como campos separados; ahí sí intercepto el evento OnChange de cada uno, si el usuario llena un valor, el valor del otro campo se pone a NULL, puesto que no se admiten dos valores simultaneos en ambos campos.
__________________
Guía de Estilo
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 19:56:35.


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