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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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;