Question

Eh bien, une sorte de question n00b de ma part. J'ai surfé sur le net et des questions similaires ici, mais je n'ai trouvé aucune bonne réponse à un problème aussi simple (comme je le pensais).

J'ai un DBGrid. Je sélectionne une ligne et effectue des actions avec une autre donnée liée à cette ligne. Une fois que j'ai terminé, mon DBGrid en cours d'actualisation et la ligne sélectionnée sont réinitialisées en premier. Je souhaite que la même ligne soit sélectionnée avant l'actualisation des données DBGrid. Des suggestions?

Était-ce utile?

La solution

Avant d'actualiser, enregistrez la sélection actuelle du jeu de données lié en tant que signet, puis restaurez le signet par la suite.

Autres conseils

Cette réponse est conçue comme un complément mineur à Mason, et non comme une alternative. Je ne l'ai ajouté que parce qu'une autre réponse est apparue, suggérant, à tort, l'utilisation de la propriété RecNo de l'ensemble de données. Tous les descendants de TDataSet n'implémentent pas RecNo de manière fiable ou pas du tout. Certains descendants renvoient simplement une valeur constante, par exemple. 0 pour la valeur RecNo des lignes actuelles et ne faites rien lorsque vous lui affectez une valeur.

procedure TMyForm.DoSomethingWithDataSet(ADataSet : TDataSet);
var
  Bookmark : TBookmark;
begin
  Bookmark := ADataSet.GetBookmark; // Save your place in ADataSet

  try
    Screen.Cursor := crSqlWait;  // Show the user that something is happening
    Update;  // update the form to make sure screen cursor updates
    ADataSet.DisableControls;
    // do something with ADataSet here  e.g.
    ADataSet.First;
    while not ADataSet.Eof do begin
      // do something with current row here, then
      ADataSet.Next;
    end;
  finally
    ADataSet.GotoBookmark(Bookmark);  // Return to where you were at outset
    ADataSet.FreeBookmark(Bookmark);
    ADataSet.EnableControls;
    Screen.Cursor := crDefault;  // Let the user see you're done
  end;
end;
RecKey:=DmFRM.ViewTBL.RecNo;
          with DmFRM.ViewTBL do
               begin
                  Active:=false;
                  Active:=True;
                  RecNo:=RecKey;
               end;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top