Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   DBGrid: Mostrar un campo u otro dependiendo de una condición (https://www.clubdelphi.com/foros/showthread.php?t=84719)

apicito 27-11-2013 18:50:24

DBGrid: Mostrar un campo u otro dependiendo de una condición
 
Tengo una tabla con dos campos nombre: "NOMBRE" y "NOMBRE_NUEVO" y un DBGrid donde una de las columnas tiene el FieldName=NOMBRE.
Lo que pretendo es que si el campo NOMBRE está vacio me muestre el campo NOMBRE_NUEVO.
He intentado varias cosas, una de ellas esta:
Código PHP:

procedure TPadronBuscaHistoria.GridHistoriaDrawDataCell(SenderTObject;
  const 
RectTRectFieldTFieldStateTGridDrawState);
begin
  
if (GridHistoria.DataSource.DataSet.Active) and
     (
trim(QueryHistoria.FieldByName('NOMBRE').AsString) = '')  and
     (
field.Name='NOMBRE'then
        GridHistoria
.Canvas.TextOut(Rect.left+5Rect.Top +5QueryHistoria.FieldByName('NOMBRE_NUEVO').AsString);
end

pero no consigo lo que pretendo.
Puede alguien ayudarme?.
Un saludo.

apicito 27-11-2013 19:07:06

Me autorespondo:
Código Delphi [-]
procedure TPadronBuscaHistoria.GridHistoriaDrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
  if (DataCol = 5) and
     (trim(QueryHistoria.FieldByName('NOMBRE').AsString) = '') then begin
          GridHistoria.Canvas.TextRect(Rect, Rect.Left + 8, Rect.Top+5,
            QueryHistoria.fieldbyName('NOMBRE_NUEVO').AsString);
  end;
end;
Fue hacer la pregunta e inmediatamente encontrar la solución.
Saludos.

elrayo76 27-11-2013 21:04:55

Lo que yo te aconsejaría mas que hacerlo por código Delphi es que en la consulta hagas una condición y llenes un campo virtual con los datos de uno u otro campo de la tabla según corresponda.

apicito 28-11-2013 08:13:13

Gracias por la aportación.
Cita:

Empezado por elrayo76 (Mensaje 470139)
Lo que yo te aconsejaría mas que hacerlo por código Delphi es que en la consulta hagas una condición y llenes un campo virtual con los datos de uno u otro campo de la tabla según corresponda.

Lo he solucionado así porque después, en elmismo formulario, muestro ambos campos cuando se va recorriendo el grid. Además, en el ejemplo puse un solo campo pero son más los afectados. Es un historico de movimientos: valor anterior valor actual.
Me parece más sencillo de esta forma.
Un saludo.


La franja horaria es GMT +2. Ahora son las 16:57:57.

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