Rafraichir un DBGrid sans perdre la séléction de la ligne
A prendre avec précaution :
Je fais une modification dans mon DBGrid par une requete quelconque. Le DBGrid ne se reinitialisera pas, je fais :
Code:
1 2
| ADOTable.Active:=false;
ADOTable.Active:=true; |
Le probleme est que si une ligne est sélectionnée par l'utilisateur, automatiquement ca sera la premiere ligne qui va etre sélectionnée.
Voici ce que j'ai trouvé sur le net et qui marche :
Le DBGrid va se reinitialisé et se positionnera de nouveau sur la ligne sélectionnée :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, .............. ;
type THackDBGrid = class (TDBGrid); // A RAJOUTER
type
TForm1 = class(TForm)
..................
procedure TForm1 .Button1Click(Sender: TObject);
var row, rowDelta, recNo:Integer;
ds:TDataSet;
begin
ds := THackDBGrid(DBGrid1).DataSource.DataSet;
rowDelta := -1 + THackDBGrid(DBGrid1).Row;
row := ds.RecNo;
ds.Refresh;
with ds do
begin
DisableControls;
RecNo := row;
MoveBy(-rowDelta) ;
MoveBy(rowDelta) ;
EnableControls;
end ;
end; |