Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Ocultar valores de celda en dbgrid (https://www.clubdelphi.com/foros/showthread.php?t=81516)

rruffino 21-11-2012 17:04:59

Ocultar valores de celda en dbgrid
 
Hola gente, tengo un dbgrid que apunta a una tabla que tiene un campo tipo y un campo importe. En la grilla tengo que poner dos campos para hacer referencia al mismo campo importe. El tema es que dependiendo del valor del campo tipo, al valor de importe debo mostrarlo en una u otra columna. He buscado por los hilos y he encontrado algo similar, pero no es lo que busco, lo que busco es por ejemplo: la grilla tiene las dos columnas importe, si el valor del campo tipo es igual a X entonces el importe lo muestro en la primer columna que muestra importes y la otra queda nulo o vacio, si no es x, la primer columna queda vacia o nula y la segunda muestra el importe.
Espero haber sido mas o menos claro. Desde ya gracias!

ecfisa 21-11-2012 18:32:31

Hola rrufino.

Simplificando el concepto, un TDBGrid es la representación visual de los datos de una tabla. Esta representación se organiza en filas y columnas, donde cada columna representa a un campo y una fila a un registro.
Entonces el problema se presenta claramente, por que para realizar lo que deseas, estaríamos necesitando un campo que no existe físicamente en la tabla...

Las alternativas que se me ocurren son darle a la celda diferentes colores dependiendo del valor del campo o, si deseas usar dos columnas y el propósito es solo a fines de presentación, usar un TStringGrid.

Saludos.:)

ElDioni 21-11-2012 19:03:59

Hola,

como te comenta ecfisa podrías cambiar el color de la fuente al del fondo del DBGrid para que no se vea el valor del campo y parezca que está vacio, aunque si tienes configurado el DbGrid para que se vea la fila seleccionada o la celda, se verá con el fondo azul y la letra blanca automáticamente por lo que se verá el valor, puedes poner una imagen tapando la celda haciendo la comprobación en el OnDrawnOnColumnCell, o algo así, del DbGrid, el tema de poner una imagen se ha tratado varias veces en el foro, así que, puedes echar un vistazo.

Saludos.

newtron 21-11-2012 20:06:43

Hola.

Igual digo una tontería pero ¿no es posible poner dos columnas del DbGrid con el mismo campo (importe) y poner visible o no el contenido según le interese?

Saludos

ecfisa 21-11-2012 21:09:19

Hola amigo newtron :)

Tiempo ya sin verte, se te extrañaba...

Y no. No estas diciendo ninguna tontería, no se me había ocurrido esa posibilidad...

Siendo 2 y 3 las columnas a ocultar segun el valor del campo importe (50 por ejemplo), ¿ Vos te referís a algo parecido a esto ?
Código Delphi [-]
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
  with Sender as TDBGrid do
  begin
    if(DataSource.DataSet.FieldByName('Importe').AsFloat <= 50) and (DataCol = 3) then
      DBGrid1.Canvas.FillRect(Rect);
    if (DataSource.DataSet.FieldByName('Importe').AsFloat > 50) and (DataCol = 2) then
      DBGrid1.Canvas.FillRect(Rect);
  end
end;

Saludos.:)

newtron 22-11-2012 09:42:35

Cita:

Empezado por ecfisa (Mensaje 450098)
Hola amigo newtron :)

Tiempo ya sin verte, se te extrañaba...

Y no. No estas diciendo ninguna tontería, no se me había ocurrido esa posibilidad...

Siendo 2 y 3 las columnas a ocultar segun el valor del campo importe (50 por ejemplo), ¿ Vos te referís a algo parecido a esto ?

Igualmente amigo ecfisa, en estas fechas ando especialmente liado ultimando proyectos que se tienen que poner en marcha a principios de año.

Efectivamente, a eso me refería, imagino que ya el compañero rruffino tiene opciones para elegir la que más le guste.

Saludos. :)

ElDioni 22-11-2012 10:41:16

No se que motor de BBDD usas pero también podrías poner una única columna que saldría don el valor adecuado ya desde la consulta SQL, de esta forma:

Código SQL [-]
  • SELECT
  • Articulo,
  • CASE
  • WHEN Tipo = 1
  • THEN Importe1
  • ELSE Importe2
  • END AS Importe
  • FROM Facturas;

  • Saludos.

    ecfisa 22-11-2012 12:36:48

    Cita:

    Empezado por ElDioni (Mensaje 450146)
    No se que motor de BBDD usas pero también podrías poner una única columna que saldría don el valor adecuado ya desde la consulta SQL, de esta forma:

    Código SQL [-]
  • SELECT
  • Articulo,
  • CASE
  • WHEN Tipo = 1
  • THEN Importe1
  • ELSE Importe2
  • END AS Importe
  • FROM Facturas;

  • Saludos.

    Esa también es buena idea ^\||/

    Y como las buenas ideas despabilan a los dormidos (lease yo), caigo en la cuenta que de ese modo también se podrían lograr las dos columnas:
    Código SQL [-]
    SELECT FECHA,
           CONCEPTO,
           ETC,
           COALESCE((CASE WHEN INGRESO <= :VALOR THEN ENTRADA END),'') AS COL1,
           COALESCE((CASE WHEN INGRESO  > :VALOR THEN ENTRADA END),'') AS COL2
    FROM TABLA

    Saludos. :)


    La franja horaria es GMT +2. Ahora son las 14:13:43.

    Powered by vBulletin® Version 3.6.8
    Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
    Traducción al castellano por el equipo de moderadores del Club Delphi