credo che ti convenga usare l'evento OnGetText dei TDateField
tipo:
uses ... dateutils ...
if Sender.IsNull then
aText:=DateTimeToStr(DateTimeToUnix(0));
in questo caso viene mostrata una data tipo 00/00/0000, ma se vuoi puoi passare una stringa vuota
if Sender.IsNull then
aText:='';
na ... è un pelino sbagliata la logica :)
Mettiamo in fila i bit:Il OnGetText è "statico".Quindi: MiaDataField.OnGetText:=@DBGrid1OnGetText;
Lo devi piazzare nel dataset e non nel render della cella.
Poi dentro il gestore della trasformazione metti il controllo che più ti è comodoprocedure TFORM1.DBGrid1OnGetText(Sender: TField; var aText: string; DisplayText: Boolean);
begin Sender.isNull or Sender.FieldValue='30/12/1899' then aText:=''; else aText := ... formattazione della data come preferisci farla vedere ....
end;
Prova questo approccio:)
na ... è un pelino sbagliata la logica :)
Mettiamo in fila i bit:Il OnGetText è "statico".Quindi: MiaDataField.OnGetText:=@DBGrid1OnGetText;
Lo devi piazzare nel dataset e non nel render della cella.
Poi dentro il gestore della trasformazione metti il controllo che più ti è comodoprocedure TFORM1.DBGrid1OnGetText(Sender: TField; var aText: string; DisplayText: Boolean);
begin Sender.isNull or Sender.FieldValue='30/12/1899' then aText:=''; else aText := ... formattazione della data come preferisci farla vedere ....
end;
segnalo a Stilgar che non ero lontano dalla 1^ idea che avevo postato e che fra l'altro non è strettamente necessario agire al livello del DataSet, perchè anche in DrawColumnCell funziona lo stesso e senza cambiare una virgola.
Questo è quanto immesso al livello della DBGrid e sono convinto che esiste una soluzione più semplice:
procedure TFORM1.DBGRID1DRAWCOLUMNCELL(SENDER: TOBJECT; const RECT: TRECT;
DATACOL: INTEGER; COLUMN: TCOLUMN; STATE: TGRIDDRAWSTATE);
begin
if column.Field.DataType=ftDate then
column.Field.OnGetText:=@NullDateToBlank;
END;