PDA

Ver la Versión Completa : Desabilitar auto post al cambiar de renglon en grid


chartres
15-05-2012, 21:36:56
Hola
Uso delphi 7, con dvexpress
tengo un cxgrid direccionado a un datasourse con un query

el caso esque tengo una columna tipo Checkbox donde selecciono renglones para editarlos, pero al cambiarme de renglon graba automaticamente los cambios del renglon modificado,

yo necesito poder grabar todos de jalon o cancelarlos, osea que no grabe nada hasta que yo le indique.

espero explicarme y alguien sepa como desactivar esa funcion.

gracias

ecfisa
15-05-2012, 21:58:41
Hola chartres.

Podes usar el evento BeforePost del TDataSet:

procedure TForm1.DataSetBeforePost(DataSet: TDataSet);
var
i: Integer;
begin
for i:= 0 to DBGRid1.FieldCount-1 do
if DBGrid1.Fields[i].IsNull then
Abort;
end;


Saludos.

chartres
15-05-2012, 22:25:31
Gracias, pero en este caso el valor lo asigno con el Checkbox
Checked asigno 1
uncheked asigno 0

no importa si esta null, lo que quiero esque no grabe asta hacerlo yo con un boton,
es un grid como un listado donde escojen que quieren y que no y al final dan grabar,
pero el grid al cambiar de renglon graba automaticamente el anterior.

y no qiero q grabe hasta yo desirselo con un boton

ecfisa
15-05-2012, 22:35:26
y no qiero q grabe hasta yo desirselo con un boton

Ahora está mas claro. Entonces podes hacer algo como:

...
var
PostEnabled: Boolean = False;

procedure TForm1.btnGuardarClick(Sender: TObject);
begin
PostEnabled:= True;
DBGrid1.SetFocus
end;

procedure TForm1.DataSetBeforePost(DataSet: TDataSet);
begin
if not PostEnabled then
Abort;
PostEnabled:= False
end;


Saludos.

MartinS
16-05-2012, 04:29:53
Hola: Creo que es algo similar a lo que una vez me pasó y necesitaba.
Mirá este (http://www.clubdelphi.com/foros/showthread.php?t=78505) hilo.

Saludos.-

Neeruu
16-05-2012, 15:22:56
Hola....


Por lo General yo en ese caso trabajo con cached...

O sea pongo el query en Cached... dejo el usuario haga los cambios que tiene que hacer y luego, cuando guarda realizo un ApplyUpdates. En caso de cancelar hago un CancelUpdates...

Ten en cuenta que un query en cached trabaja con los datos de forma local y una vez que aplicas los cambios recién se envían al servidor...


En caso que tengas varios querys en cached y tengas que aplicar los cambios... puedes hacerlo de la siguiente manera...


Try
Transaccion.StarTransaction;

if Qry1.UpdatesPending then //Esto devuelve si tiene cambios en cached pendientes de aplicar
Qry1.ApplyUpdates;

if Qry2.UpdatesPending then
Qry2.ApplyUpdates;

if Qry3.UpdatesPending then
Qry4.ApplyUpdates;

Transaccion.Commit;


Except
Transaccion.RollBack;
end;


En tu caso:
Si presiona el boton grabar haces todos los applyupdates, si presiona el boton cancelar haces los cancelupdates;


Qry1.CancelUpdates;
Qry2.CancelUpdates;
Qry3.CancelUpdates;

chartres
16-05-2012, 20:45:48
Hola....


Por lo General yo en ese caso trabajo con cached...



Hola, revise esa opcion pero falto desir que yo uso AdoQuery y almenos no veo esa propiedad de cachedupdates, cosa que si tiene el Tquery normal.

Tambien trate con lo que desia arriba ecfisa de Abort ants del post, pero no me permitia cambiar al siguiente registro.

Como lo estoy intentando es manejando un dxMemData, un grid temporal donde cargo los registros de el query y despues que se modifican en el grid, reocorro registro por registro con un proceso y segun los cambios que haya los aplico al query,
funciona muy bien pero tiene inconvenientes, por ejemplo no esta sincronizado con el query, osea si sortean o filtran el grid, el query no se filtra y pues para pasar los cambios al query requiero aser varias validaciones por registro, que al final de cuentas oslo es trababjo mas.

gracias a todos por los comentarios..

roman
16-05-2012, 20:56:47
Prueba poniendo la propiedad LockType del ADOQuery en ltBatchOptimistic. De cuerdo a la ayuda, debesusar entonces el método Updatebatch para grabar los cambios.

// Saludos

chartres
16-05-2012, 22:41:33
Gracias roman, era lo que buscaba y algo me desia que no tenia porque ser tan dificil.

almenos asta ahorita funciono. no se si tenga sus puntos criticos.