Rafraichissement DBGRID [Résolu]

Signaler
Messages postés
166
Date d'inscription
mardi 11 novembre 2003
Statut
Membre
Dernière intervention
13 octobre 2008
-
Messages postés
4715
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
-
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

Messages postés
166
Date d'inscription
mardi 11 novembre 2003
Statut
Membre
Dernière intervention
13 octobre 2008

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....
Messages postés
4715
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
13
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
Messages postés
166
Date d'inscription
mardi 11 novembre 2003
Statut
Membre
Dernière intervention
13 octobre 2008

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.

                        
                
Messages postés
4715
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
13
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
Messages postés
166
Date d'inscription
mardi 11 novembre 2003
Statut
Membre
Dernière intervention
13 octobre 2008

J'ai ajouter les DisableControls avant et EnableControls après, mais j'ai toujours le même comportement...