PDA

Ver la Versión Completa : Formato Fecha en DbGrid


IceJamp
23-09-2004, 18:22:45
Saludos. ¿ Podría alguien indicarme como hacer para que la introducción de fechas en un DbGrid se realizara igual que en un control específico para fechas ( p.e. DbDateTimePicker ) ?

Gracias

marcoszorrilla
23-09-2004, 19:14:08
Puedes incrustar un DateTimePicker encima de la rejilla con la propiedad visible a falso y luego con este código que pongo de ejemplo ir mostrándolo y modificando la fecha sin ningún problema.


procedure TForm1.DBGrid1ColEnter(Sender: TObject);
begin
if DbGrid1.Columns [DbGrid1.SelectedIndex].
Field = Table1Saledate then
DateTimePicker1.Visible := True
else
DateTimePicker1.Visible := False;
end;

procedure TForm1.DateTimePicker1Change(Sender: TObject);
begin
Table1.Edit;
Table1Saledate.Value:=Trunc(DateTimePicker1.Date);
end;

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if (gdFocused in State) and
(Column.Field = Table1Saledate) then
begin
DateTimePicker1.SetBounds (
Rect.Left + DBGrid1.Left + 1,
Rect.Top + DBGrid1.Top + 1,
Rect.Right - Rect.Left,
Rect.Bottom - Rect.Top);

DateTimePicker1.Date:=Trunc(Table1Saledate.Value);
end;
end;



Un Saludo.

IceJamp
23-09-2004, 19:52:02
Gracias. Investigando en otro foro ví la solución que me propones y funciona. Hay que hacerle un para de retoques para que no se note que es un control encima de otro pero funciona. Gracias.

marcoszorrilla
23-09-2004, 20:05:22
Se puede saber que retoques le has hecho?

Un Saludo.

IceJamp
28-09-2004, 13:22:42
He quitado el evento OnChange del DateTimePicker y lo he sustituido por:

En el evento OnEnter del DateTimePicker:

procedure TFrmMoviBanc.FechaGridEnter(Sender: TObject);
begin
FechaGrid.Date := TablaMov.FieldByName('FECOPE').AsDateTime;
end;

para que al activarse el DateTimePicker éste aparezca con la fecha que hay en la base de datos en el campo que estamos editando

En el evento OnExit del DateTimePicker:

procedure TFrmMoviBanc.FechaGridExit(Sender: TObject);
begin
dbGridDatos.SelectedIndex := 2;
if TablaMov.State in [ dsInsert, dsEdit ] then
TablaMov.FieldByName('FECOPE').AsDateTime := FechaGrid.Date;
end;

activo la siguiente columna del dbgrid y si estoy editando o insertando, actualizo en la base de datos el valor del DateTimePicker.

Espero que sirva.