Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Borrar registros de un grid. Salta al siguiente (https://www.clubdelphi.com/foros/showthread.php?t=88679)

Gregorio Cíber 14-07-2015 23:27:23

Borrar registros de un grid. Salta al siguiente
 
Hola amigos.
Aunque el tema de refrescar un grid después de insertar/modificar/etc. se ha tratado en muchas ocasiones aquí, no veo que este caso haya sido objeto de consulta.
Se trata de lo siguiente. Para refrescar una pantalla de datos (maestro/detalle) que haya podido ser modificada por otro puesto, antes de insertar un nuevo registro, modificar o anular uno existente, hago una llamada a esta función (la parte comentada del final es para excluir que ahí se produzca el comportamiento anómalo):

Código Delphi [-]
function SePuedePedido(t_cab, t_lin: TpFIBDataSet; s_cli_pro: string; n_ref_pedido, n_ref_cli_pro: integer; d_fecha: TDate; b_comprobar_cli_pro: Boolean): Boolean;
var
  marca: TBookmark;
begin
  // Tabla de cabeceras
  t_cab.Refresh;
  // Tabla de líneas
  with t_lin do
  begin
    try
      marca := GetBookmark;
      DisableControls;
      CloseOpen(True);
      //FullRefresh;
      //t_lin.Edit;
      //t_lin.Cancel;
    finally
      GotoBookmark(marca);
      FreeBookmark(marca);
      EnableControls;
    end;
  end;

  Result := True;
//  Result := PedidoDisponible(s_cli_pro, n_ref_pedido);
//
//  if Result and b_comprobar_cli_pro and CliProBloqueado(s_cli_pro, n_ref_cli_pro, d_fecha) then
//    Result := False;
end;

La parte en negrita la he probado con está arriba, bien así:

Código Delphi [-]
     //CloseOpen(True);
      FullRefresh;
      //t_lin.Edit;
      //t_lin.Cancel;


o bien así:

Código Delphi [-]
      //CloseOpen(True);
      //FullRefresh;
      t_lin.Edit;
      t_lin.Cancel;


y en todos los casos ocurre lo siguiente:
  1. Borro un registro del grid detalle y perfecto. El registro desaparece y se hace el scroll.
  2. Intento borrar de nuevo el registro que está ahora marcado, salta al siguiente y lo borra.
A ver. Por si no me he explicado bien. Supongamos una tabla detalle de pedidos con estas líneas:

Código:

001 Bañera

002 Grifo bañera
003 Ducha
004 Grifo ducha

005 Lavabo
006 Grifo lavabo

Señalo 003 y lo borro. Quedaría:

Código:

001 Bañera

002 Grifo bañera
004 Grifo ducha

005 Lavabo
006 Grifo lavabo


Si intento borrar de nuevo, ocurriría:

Código:

001 Bañera

002 Grifo bañera
004 Grifo ducha

005 Lavabo
006 Grifo lavabo


Obviamente si acepto borrar, borraría el registro 005 y no el 004.


Como llevo con esto horas y horas, torpe que es uno, y no doy con la solución, solicito ayuda. Utilizo Delhpi 6 y componentes FIBPlus 6.4.1

Gracias anticipadas.

Casimiro Noteví 14-07-2015 23:30:52

Recuerda poner los tags al código fuente, ejemplo:


Gregorio Cíber 14-07-2015 23:42:42

Sorry, No volverá a ocurrir.

Casimiro Noteví 14-07-2015 23:54:13

No pasa nada, recuérdalo para la siguiente vez :)
Ya lo cambié por ti.

Gregorio Cíber 15-07-2015 00:05:20

Gracias Casimiro. Lo iba a hacer ahora pero te has adelantado. Eres rápido y veloz.


La franja horaria es GMT +2. Ahora son las 12:37:11.

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