質問

まあ、私からのある種のn00bの質問。私はここでネットと同様の質問をサーフしましたが、そのような単純な(思ったように)問題に対する正しい答えは見つかりませんでした。

DBGridがあります。 1つの行を選択し、この行にリンクされた別のデータでいくつかのアクションを実行します。終了後、DBGridが更新され、選択した行が最初にリセットされます。 DBGridデータを更新する前に選択した行と同じ行を選択したい。提案はありますか?

役に立ちましたか?

解決

更新する前に、リンクされたデータセットの現在の選択をブックマークとして保存し、その後ブックマークを復元します。

他のヒント

この回答は、代替ではなく、メイソンのマイナーな補足として意図されています。追加したのは、データセットのRecNoプロパティの使用を間違って示唆している別の答えが表示されたためです。すべてのTDataSetの子孫がRecNoを確実に実装するわけではありません。一部の子孫は、定数値を返すだけです。現在の行のRecNoは0で、値を割り当てても何もしません。

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;
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top