Rafraichissement DBGRID

Résolu
Sat83 Messages postés 166 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 13 octobre 2008 - 19 juin 2008 à 12:01
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 - 21 juin 2008 à 13:30
Bonjour,

J'ai une petite question concernant le rafraichissement de mon DBGRID...

Mon DBGRID contient plusieurs centaine de lignes.

Lorsqu'une ligne est sélectionné, il est possible de la modifié en cliquant sur un bouton modifié. ( Une fois valider, j'utilise un TQuery pour faire un Update de cette ligne dans la base).

Une fois cette modification effectuée, je veut rafraichir mon DBGRID, et donc pour le Dataset lié je fais :

MyDataSet.Active := false ;
MyDataSet.Active := true ;

Là mon DBGRID se remet bien a jour, le problème c'est qu'il revient tout en haut sur le premier enregistrement (normal).

Je souhaiterais savoir comment faire pour revenir à la ligne qui était sélectionnée avant le rafraichissement.

Merci d'avance

5 réponses

Sat83 Messages postés 166 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 13 octobre 2008
19 juin 2008 à 12:14
J'ai trouvé une solution qui fais presque l'affaire en utilisant GetBookMark , GotoBookmark et FreeBookmark.

Ca marche nickel si ce n'est que la ligne où je me trouvais avant le rafraichissement se retrouve centrée au mileu du DBGRID.

Si quelqu'un a la solution pour se retrouver exactement a la même position (même ligne + même position dans le DBGRID) je suis preneur.

En attendant je me satisfait de cette solution....
3
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
21 juin 2008 à 13:30
il te faut un index primaire(clé) dans la table, sinon le grid se cale au milieu de celle-ci.
et dans ce cas, le dbgrid en cas de modif ne bouge pas !
il reste naturellement sur l'enregistrement sélectionné et à la même position
du grid.

le bookmark lui ne s'aoccupant que du calage de l'enregistrement, pas du
grid.

cantador
3
Sat83 Messages postés 166 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 13 octobre 2008
20 juin 2008 à 09:24
J'ai simplement fais :

-----------------------------------------
var bm : TBookmark;

bm := myQuery.GetBookMark;
[...]
myQuery.Active := false ;
myQuery.Active := true;

myQuery.GotoBookmark(bm);
myQuery.FreeBookmark(bm);
-----------------------------------------

Et là dans mon DBGRID je me retrouve effctivement positionné sur la bonne ligne, mais toujours centré sur le DBGRID.


                
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
20 juin 2008 à 10:30
Attention le bookmark est un pointeur..

essaie cette solution :

var
bm : TBookmark;





[...]




try
     screen.cursor := CrHourGlass;
     myQuery.disableControls;
   try
        begin
          myQuery.GotoBookmark(bm);
          myQuery.FreeBookmark(bm);
          bm : = nil;
        end;
  except
        myQuery.EnableControls;
        bm:= nil;
        exit;
   end;
finally
  myQuery.EnableControls;
  screen.cursor : = CrDefault;
end;

cantador
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Sat83 Messages postés 166 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 13 octobre 2008
20 juin 2008 à 10:48
J'ai ajouter les DisableControls avant et EnableControls après, mais j'ai toujours le même comportement...
0
Rejoignez-nous