FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
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 |
#2
|
|||
|
|||
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;
__________________
Guía de Estilo |
#3
|
|||
|
|||
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 |
#4
|
|||
|
|||
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 |
#5
|
|||
|
|||
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 |
#6
|
|||
|
|||
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 |
#7
|
|||
|
|||
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 |
#8
|
|||
|
|||
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 |
|
|
|