Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Mantener la misma vista en un DBGrid (https://www.clubdelphi.com/foros/showthread.php?t=65070)

jaimeh 18-11-2009 13:31:55

Mantener la misma vista en un DBGrid
 
Hola a todos

A ver si me podéis ayudar con esto.

Tengo un DBGrid asociado a un ClientDataSet.

En el DBGrid selecciono un celda con el raton

y luego en el evento onClick de un button hago

ClientDataSet.DisableControls

Luego trabajo con el ClientDataSet

y al final
ClientDataSet.EnableControls

Y lo que pretendo es que el DBGrid mantenga la misma posición (vista) y la misma celda seleccionada que antes de DisableControls

Espero que alguien sea tan amable y pueda orientarme

Un saludo para todos

rgstuamigo 18-11-2009 13:48:34

Se puede hacer de 2 maneras:rolleyes:.
Primera:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var p:TBookmark;
begin
   try
    ClientDataSet1.DisableControls;
      p:=ClientDataSet1.GetBookmark;// creo un puntero apuntando al registro actual del DataSet
         //Hago lo que sea con el clientDataset
         //Me muevo para adelante o para atras, etc.
      ClientDataSet1.GotoBookmark(p);//hago volver al registro donde estaba antes
   finally
      ClientDataSet1.FreeBookmark(p);//libero el objeto p
     ClientDataSet1.EnableControls;
   end;
end;
Segunda:
Código Delphi [-]
procedure TForm1.Button2Click(Sender: TObject);
var Fila_Actual:Integer;
begin
    Fila_Actual:=ClientDataSet1.RecNo;
    ClientDataSet1.DisableControls;
         //Hago lo que sea con el clientDataset
         //Me muevo para adelante o para atras, etc.
    ClientDataSet1.RecNo:=Fila_Actual;//vuelvo al registro donde estaba inicialmente 
    ClientDataSet1.EnableControls;
end;
Saludos...:)

Caro 18-11-2009 14:50:02

Hola jaimeh, yo te aconsejo que utilices BookMark y no RecNo este último no funciona con todas las Bases de datos ni todos los componentes de BDs.

Puedes utilizar el BookMark del mismo DataSet.

Código Delphi [-]
var
 Marca : TBookMarkStr;
begin
   Marca := ClientDataSet1.Bookmark;// Almacenamos la posición del registro actual
   try
    ............................................
    ClientDataSet.DisableControls;
    .............................................
    ClientDataSet1.EnableControls;
   finally
     ClientDataSet.Bookmark := Marca;//Restauramos a la posición anterior
   end;

Saluditos

jaimeh 18-11-2009 15:18:57

Muchas gracias a todos por responderme

Lo del RecNo ya lo había hecho yo y lo del bookmark hace hace lo mismo

El problema está en que no se queda con la misma vista que tenía antes el
dbgrid.

Hay que tener en cuenta que se hace click en una celda del dbgrid
que no tiene porque ser de la primera linea del dbgrid.

Y al EnbledControls el primer registro que muestra el dbgrid no es el mismo
que mostraba antes de disableControls aunque la celda seleccionada si es
la misma.

Espero haberme explicado

Saludos a todos

coso 18-11-2009 18:35:12

Hola,
ten en cuenta que en el momento que varias el dataset, te varian los datos que se muestran: me refiero que es posible que se empezaran a mostrar por un registro y estuviese otro seleccionado, que luego al cambiar el dataset ya no saldrian. Para hacer lo que dices, deberas modificar un objeto llamado datalink perteneciente al dbgrid, de tal manera que se empiece a leer desde el mismo registro que antes de cambiar el dataset, usando activerecord y currentrecord. Haz una busqueda al respecto y seguramente te sera sencillo programarlo. Un saludo.


La franja horaria es GMT +2. Ahora son las 16:08:15.

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