Ver Mensaje Individual
  #7  
Antiguo 16-05-2017
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Reputación: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.
Cita:
Empezado por ginobili20 Ver Mensaje
Tengo un problema parecido... lo pudiste solucionar??
La última vez que fcobanda pasó por aquí fue por marzo del 2012, así que te propongo una posible solución capturando el evento OnClick de los botones del TDBNavigator.

Ejemplo:
Código Delphi [-]
...
type
  TDBNavigator = class( DBCtrls.TDBNavigator );

  TForm1 = class( TForm )
    tuDataSet: TIBDataSet;
    DataSource1: TDataSource;
    DBGrid1: TDBGrid;
    DBNavigator1: TDBNavigator;
    ...
    procedure FormCreate(Sender: TObject);
    procedure tuDataSetNewRecord(DataSet: TDataSet);
    
  private
    FBookmark: TBookmark;
    procedure DBNavigatornbInsertClick( Sender: TObject );
    procedure DBNavigatornbCancelClick( Sender: TObject );
  public
  end;

...

implementation  

procedure TForm1.FormCreate( Sender: TObject );
begin
  DBNavigator1.Buttons[nbInsert].OnClick := DBNavigatornbInsertClick;
  DBNavigator1.Buttons[nbCancel].OnClick := DBNavigatornbCancelClick;
  FBookmark := nil;
end;

procedure TForm1.DBNavigatornbInsertClick( Sender: TObject );
var
  nv: TDBNavigator;
begin
  nv := TDBNavigator(TControl(Sender).Parent);

  if Assigned( FBookmark ) then
  begin
    nv.DataSource.DataSet.FreeBookmark( FBookmark );
    FBookmark := nil;
  end;
  FBookmark := nv.DataSource.DataSet.GetBookmark;
  if Assigned( nv.DataSource ) and ( nv.DataSource.State <> dsInactive ) then
  begin 
    if Assigned( nv.BeforeAction ) then nv.BeforeAction(nv, nbInsert);
    nv.DataSource.DataSet.Insert;
    if Assigned( nv.OnClick ) then nv.OnClick( nv, nbInsert);
  end;

end;

procedure TForm1.DBNavigatornbCancelClick( Sender: TObject );
var
  nv: TDBNavigator;
begin
  nv := TDBNavigator( TControl( Sender ).Parent );
  if Assigned( FBookmark ) then
    nv.DataSource.DataSet.GotoBookmark( FBookmark );
end;

procedure TForm1.tuDataSetNewRecord( DataSet: TDataSet );
begin
  //...
end;
Es importante decirte que esta opción funcionará en el caso de un TIBDataSet, que es el caso que inicia este hilo, pero no lo hará con DataSets unidireccionales ( v.gr.: TSQLDataSet ) ya que estos últimos no soportan el uso de Bookmarks.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 16-05-2017 a las 20:36:26.
Responder Con Cita