Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Tablas planas
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 30-03-2012
barakuda barakuda is offline
Miembro
 
Registrado: mar 2010
Posts: 79
Poder: 15
barakuda Va por buen camino
Cancelar DBGrid

Hola, tengo un problemilla que no consigo saber solucionar veran,
tengo una DBGrid con varios botones Aceptar, Cancelar, Aplicar, Editar. Si entro en modo edición y modifico la linea en la que me situó y antes de aplicar cancelo, me elimina cualquier modificación echa, asta aquí todo OK, en cambio si antes de aplicar o cancelar hago clic en otra linea me guarda las modificaciones echas lo cual no me interesa ya que puede prestar a confusiones y falsos datos. Para ello se me ocurrió conocer en que linea estoy cuando inicio la edición, y en el evento oncellclick compararla con el actual

Código Delphi [-]
procedure TAnadir.DBGrid10CellClick(Column: TColumn);

begin
ojo_fila:=Form1.DataSource2.DataSet.RecNo; // Lee la posicion de linia en la tabla

if fila<>ojo_fila then // compara linia actual (ojo_fila) con inicio edicion (fila) deser diferentes cancela todo

begin
form1.Anadir1.DBGrid10.Options:=form1.anadir1.DBGrid10.Options +[dgCancelOnExit] -[dgEditing];
form1.ADOTable2.Cancel;

form1.Anadir1.DBLookupComboBox4.Enabled:=False; // {OFICINA}
form1.Anadir1.DBLookupComboBox5.Enabled:=False; // {RED}
form1.Anadir1.DBCheckBox12.Enabled:=False; // {OCUPADA}

end;

... pues bien aun así solo consigo cancelar el proceso clickeando en el botón cancelar.
El código que detecta la diferencia de linea en la cual estoy funciona pero no me cancela la edición y no se que mas puedo hacer.

les agradecería algún comentario o aclaración, muchas gracias de adelantado.
Responder Con Cita
  #2  
Antiguo 30-03-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 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 barakuda.

Una opción sería utilizar la propiedad Tag del TButton con que aceptas, como flag para evaluarlo en el evento BeforePost del TDataSet:
Código Delphi [-]
...
procedure TForm1.FormCreate(Sender: TObject);
begin
  btnAceptar.Tag:= 0;
end;

procedure TForm1.DataSetBeforePost(DataSet: TDataSet);
begin
  if btnAceptar.Tag = 0 then  // ¿ Post desactivado ?
    DataSet.Cancel;  // si, cancelar               
end;

procedure TForm1.btnAceptarClick(Sender: TObject);
begin
  with DBGrid1.DataSource.DataSet do
  begin
    btnAceptar.Tag:= 1; // Post habilitado
    Edit;
    Post;
    btnAceptar.Tag:= 0; // Post desactivado
  end;
end;
...
Si se me una mejor opción te comento.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 30-03-2012
barakuda barakuda is offline
Miembro
 
Registrado: mar 2010
Posts: 79
Poder: 15
barakuda Va por buen camino
Unhappy

Gracias por tu rapida respuesta mira de paso me dao cuenta que si mientras estoy editando una celda juego con la ruleta del raton el foco me baja o sube sobre la columna donde estoy editando permitiendome tambien editar esa otra celda, para correguir eso lo que hago es insertar la esencia del codigo en el evente ONMouseWheel

Código Delphi [-]
procedure TAnadir.DBGrid10MouseWheel(Sender: TObject; Shift: TShiftState;
  WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
begin

        Form1.Anadir1.DBGrid10.Options := Form1.Anadir1.DBGrid10.Options +
          [dgCancelOnExit] - [dgEditing];
        Form1.ADOTable2.Cancel;
        Form1.Anadir1.DBLookupComboBox4.Enabled := False; // {OFICINA}
        Form1.Anadir1.DBLookupComboBox5.Enabled := False; // {TIPO DE RED}
        Form1.Anadir1.DBCheckBox12.Enabled := False; // {OCUPADA}
        Form1.Anadir1.DBCheckBox13.Enabled := False; // {ACTIVADA}
        Form1.Anadir1.DBCheckBox14.Enabled := False; // {ESTADO}
        Form1.Anadir1.BitBtn8.Enabled := False; // [APLICAR]
        Form1.Anadir1.BitBtn9.Enabled := False; // [CANCELAR]
        Form1.Anadir1.BitBtn1.Enabled := True; // [NUEVO]
        Form1.Anadir1.BitBtn10.Enabled := True; // [EDITAR]
        // ********** FIN del Bloque **********

end;

y ahora con solo usarla ya sea para subir o bajar automáticamente me cancela cualquier modificación que yo aya echo, eso es lo que me interesaria que hiciese al cambiar de fila pero no hay manera ...
Responder Con Cita
  #4  
Antiguo 30-03-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 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.

¿ Y no te serviría desactivar el evento MouseWheel ?
Código Delphi [-]
...
  private
    procedure MouseEvent(var Msg: TMsg; var Handled: Boolean);
  end;
...

implementation

procedure TForm1.FormCreate(Sender: TObject);
begin
  Application.OnMessage:= MouseEvent;
end;

procedure TForm1.MouseEvent(var Msg: TMsg; var Handled: Boolean);
begin
  if Msg.Message =  WM_MOUSEWHEEL then
   Handled:= True;
end;
...

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo 30-03-2012
barakuda barakuda is offline
Miembro
 
Registrado: mar 2010
Posts: 79
Poder: 15
barakuda Va por buen camino
Cita:
Empezado por ecfisa Ver Mensaje
Hola barakuda.

Una opción sería utilizar la propiedad Tag del TButton con que aceptas, como flag para evaluarlo en el evento BeforePost del TDataSet:
Código Delphi [-]... procedure TForm1.FormCreate(Sender: TObject); begin btnAceptar.Tag:= 0; end; procedure TForm1.DataSetBeforePost(DataSet: TDataSet); begin if btnAceptar.Tag = 0 then // ¿ Post desactivado ? DataSet.Cancel; // si, cancelar end; procedure TForm1.btnAceptarClick(Sender: TObject); begin with DBGrid1.DataSource.DataSet do begin btnAceptar.Tag:= 1; // Post habilitado Edit; Post; btnAceptar.Tag:= 0; // Post desactivado end; end; ...

Si se me una mejor opción te comento.

Saludos.
gracias por el consejo pero el problema lo tengo creo yo en el evento OnCellClick del DBGrid. Desde un boton no tengo problema, el problema lo tengo cuando edito cualquier linea y clikeo en otra lo que yo pretendo es que cuando suceda eso, cancele cualquier modificación que se haya echo sin que se clike el botón cancelar.
Responder Con Cita
  #6  
Antiguo 30-03-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 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.

Creo que no expresé bién la idea del código.

En el evento BeforePost se verifica el valor de la propiedad Tag del TButton y solamente guarda el registro si esta tiene el valor 1.
La propiedad Tag del TButton sólo puede tomar el valor 1 si se ejecuta el evento OnClick (btnGuardarClick) del TButton. En este procedimiento (btnGuardarClick) se pone btnGuardar.Tag a 1, se guarda el registro y se vuelve a poner en cero.
Dado que antes de guardar si o si se ejecuta el evento BeforePost y en este se impide almacenar si el valor de la propiedad Tag del boton es igual a cero, no se puede realizar esa acción por otro medio que no sea btnGuardarClick.

En resumidas cuentas, sólo se puede guardar mediante el btnGuardar.

Lo que sí noté ahora es que, habiendo empezado a editar un nuevo registro(línea) y hacer click sobre una celda anterior, copia el último en la cancelada, esto se soluciona agregando una línea:
Código Delphi [-]
procedure TForm1.DataSetBeforePost(DataSet: TDataSet);
begin
  if btnAceptar.Tag = 0 then  // ¿ Post desactivado ?
  begin
    DataSet.Cancel;  // si, cancelar
    Abort;  // <--- Esta línea.
  end;
end;

Saludos.
__________________
Daniel Didriksen

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

Última edición por ecfisa fecha: 30-03-2012 a las 16:00:13.
Responder Con Cita
  #7  
Antiguo 31-03-2012
barakuda barakuda is offline
Miembro
 
Registrado: mar 2010
Posts: 79
Poder: 15
barakuda Va por buen camino
ecfisa te doy mil gracias en primer lugar por tu tiempo dedicado y en segundo lugar por que con esta solución e conocido el evento BeforePost y depaso a sacar utilidad a los Tag.

un saludo y gracias!!
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Cancelar el salto hacia otra celda de un DBGrid micky mouse Varios 3 28-05-2008 22:58:49
Cancelar Post Acker Conexión con bases de datos 4 22-05-2006 14:18:20
cancelar una consulta jmlifi SQL 1 08-11-2005 20:14:11
Cancelar insercion el_barto Conexión con bases de datos 2 26-07-2005 01:26:26
Cancelar modificacion en DBGrid Er_Manué Conexión con bases de datos 4 29-07-2003 20:02:52


La franja horaria es GMT +2. Ahora son las 17:08:22.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi