PDA

Ver la Versión Completa : Dbgrid en isert o edit que no cambie de fila


José Luis Garcí
08-05-2018, 21:19:25
Buenos días compañeros, después de mucho tiempo me he puesto a programar nuevamente y tengo un problema con un dbgrid.

El tema es que necesito que por mucho que se quiera no permita irse a otra linea, mientras este en edición o inserción, hasta que grabemos y creemos una nueva.

Un saludo a todos

ecfisa
08-05-2018, 21:47:46
¡ Hola gusto en verte nuevamente por aquí !

Fijate si te sirve esto: Desabilitar auto post al cambiar de renglon en grid (http://www.clubdelphi.com/foros/showthread.php?t=78764)

Saludos :)

José Luis Garcí
08-05-2018, 22:35:08
Mucho gusto en saludarte ecfisa, en este caso no me vale, ya que lo controlo mediante un datasource y no puedo poner el ibdataset en el evento DataSetBeforePost y no quiero tocar este ya que desde otro formulario debe funcionar normal.

Pensaba que usado el Eveto KeyDow y controlando el up y Down me bastaría pero no, ya que uso varias listas y otros en dbgrid y como me descuide me crea un nuevo registro que es lo que no quiero, por eso es obligar a crear/editar/grabar o cancelarlo mediante botones

De todas maneras gracias

Casimiro Notevi
08-05-2018, 22:58:19
Como indica ecfisa, al cambiar de línea en el dbgrid se realiza un "autopost", por lo que se lanzará el evento beforepost. Ahí puedes controlar lo que quieras hacer.

José Luis Garcí
08-05-2018, 23:10:03
Okey, lo probare y buscare como anular el movimiento

ecfisa
09-05-2018, 13:16:58
Hola.
Mucho gusto en saludarte ecfisa, en este caso no me vale, ya que lo controlo mediante un datasource y no puedo poner el ibdataset en el evento DataSetBeforePost y no quiero tocar este ya que desde otro formulario debe funcionar normal.

Pero no es necesario dejar el evento asignado, podes asignar el evento al entrar al form y liberarlo al salir, v.gr.:

// incluye DB (por TDataSet)
...
type
TForm1 = class(TForm)
DBGrid1: TDBGrid;
procedure FormCreate(Sender: TObject);
//...
procedure FormDestroy(Sender: TObject);
private
procedure DataSetBeforePost(DataSet: TDataSet);
public
end;
...
implementation

uses DataModule1; // (podrías asignar el evento desde el mismo dataset)

var
PostEnabled: Boolean = False;

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

procedure TForm1.FormCreate(Sender: TObject);
begin
DBGrid1.DataSource.DataSet.Open;
DBGrid1.DataSource.DataSet.BeforePost := DataSetBeforePost;
end;

//----

procedure TForm1.FormDestroy(Sender: TObject);
begin
DBGrid1.DataSource.DataSet.BeforePost := nil;
end;

(* En algún sitio al guardar... *)
...
begin
PostEnabled:= True;
DBGrid1.SetFocus
end;

end.


Saludos :)