PDA

Ver la Versión Completa : Borrar registros de un grid. Salta al siguiente


Gregorio Cíber
14-07-2015, 23:27:23
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):

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í:

//CloseOpen(True);
FullRefresh;
//t_lin.Edit;
//t_lin.Cancel;

o bien así:

//CloseOpen(True);
//FullRefresh;
t_lin.Edit;
t_lin.Cancel;

y en todos los casos ocurre lo siguiente:

Borro un registro del grid detalle y perfecto. El registro desaparece y se hace el scroll.
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:


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:


001 Bañera

002 Grifo bañera
004 Grifo ducha

005 Lavabo
006 Grifo lavabo


Si intento borrar de nuevo, ocurriría:


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 Notevi
14-07-2015, 23:30:52
Recuerda poner los tags al código fuente, ejemplo:

http://www.clubdelphi.com/images/UtilizarTAGs.png

Gregorio Cíber
14-07-2015, 23:42:42
Sorry, No volverá a ocurrir.

Casimiro Notevi
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.