Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Dbgrid double click (https://www.clubdelphi.com/foros/showthread.php?t=72435)

shoulder 18-02-2011 15:18:10

Dbgrid double click
 
Hola, No sabia porque un usuario me modificaba un registro distinto al que estaba viendo. Yo tengo un Form con un Dbgrid y abajo de este varios edit, el usuario elige con un doble click la linea y dentro del ondblclick tengo una rutina que hace que se completen los diferentes edit con los datos de la linea, asi el usuario cambia lo que necesita y pulsa el boton modificar.
Dentro del Boton
Código:

........
zquery4.sql.add ('where codigo = :codigo');
zquery4.ParamByName('codigo').Value := dbgrid1.fields[0].text;
....

Que descubri, el usuario hacia el Doble Click, se completaban los datos, pero despues hacia UN CLICK en otra linea del dbgrid, con UN CLICK no cambian los edit, pero me cambiaba el codigo internamente. Asi que tuve que cambiar que dentro del ondblclick guarde el codigo en un edit oculto y la rutina de update me quedo asi.
Código:

........
zquery4.sql.add ('where codigo = :codigo');
zquery4.ParamByName('codigo').Value := Edit8.text;
....

Por las dudas le comento, si alguno le dio este error, o tienen otra idea.

Gracias.

ecfisa 28-02-2011 04:48:30

Hola shoulder.

Si no te entiendo mal, creo que tu problema se soluciona con una variable privada de tipo TBookmarkStr.

Código Delphi [-]
...
  private
     FBM:= TBookMarkStr;
  public
  end;
...
implementation
...
procedure TForm1.DBGrid1DblClick(Sender: TObject);
begin
  FBM:= DataSet.Bookmark; // Posición del DataSet cuando hace doble click
  Edit1.Text:= DataSet.FieldByName('CAMPO1').AsString;
  Edit2.Text:= DataSet.FieldByName('CAMPO2').AsString;
  ...
end;

procedure TForm1.ModificarClick(Sender: TObject);
var
  LBM: TBookmarkStr;
begin  
  LBM:= DataSet.Bookmark; // Guardar posición actual del DataSet
  DataSet.Bookmark:= FBM; // Posición que tenía el DataSet en OnDblClick
  DataSet.Edit;
  DataSet.FieldByName('CAMPO1').AsString:= Edit1.Text;
  DataSet.FieldByName('CAMPO2').AsString:= Edit2.Text;  
  ...
  DataSet.Post;
  DataSet.Bookmark:= LBM; // restaurar posición actual
end;

Un saludo.


La franja horaria es GMT +2. Ahora son las 16:32:25.

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