2009-10-25 8 views
5

まあ、私から何らかの種類のn00b質問。私はネットなどの質問をここでサーフしましたが、このようなシンプルな(私が思ったように)問題に対して正しい答えは見つかりませんでした。DBGridをリフレッシュした後に行を選択してください

私はDBGridを持っています。私は1つの行を選択し、この行にリンクされた別のデータでいくつかのアクションを行います。私が終了した後、私のDBGridがリフレッシュされ、行のリセットが最初に選択されました。私はDBGridデータを更新する前に選択された同じ行を選択したい。助言がありますか?

答えて

4

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

+0

うん、うまくいくようです。ありがとうございました! – Vlad

+1

サンプルコードを教えてください。 – truthseeker

-1
RecKey:=DmFRM.ViewTBL.RecNo; 
      with DmFRM.ViewTBL do 
       begin 
        Active:=false; 
        Active:=True; 
        RecNo:=RecKey; 
       end; 
+0

これにはすでに-1があるので、私は私のことを追加しません。 -1の理由は、おそらく、すべてのTDataSet子孫がRecNoを便利に実装するわけではない場合もあれば、まったくそうでない場合もあるからです。 – MartynA

+0

@MartynA: "GetBookmarkは、ブックマークの値を取得するための保護されたメソッドに依存しています。TDataSetの子孫は、このメソッドを実装して独自のブックマークのサポートを提供しています単方向データセットはブックマークをサポートしていないため、意味のある値を返しません。 –

+0

@Mahmood_M:なぜあなたは私にそれを引用しているのか分かりません。単方向データセットはブックマークをサポートしていないかもしれませんが、TDBGridに直接接続することはできません。つまり、グリッドは双方向でナビゲート可能なデータセットに依存します。したがって、TDBGridに単方向データセットを使用するには、グリッドをTClientDatasetに接続し、単方向データセットからそのデータセットをロードする必要があります。 – MartynA

4

この回答は、Masonの補足であり、代替ではありません。私は、データセットの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; 
+0

BoomarkはRecNoのように機能しますか?か否か ?たとえば、ブックマークを取得した後、選択したレコードの前にいくつかのレコードを削除し、次にブックマークに移動すると、選択したレコードは削除前と同じになります。言い換えれば、ブックマークストアだけRecNoまたはレコードの位置またはそれは選択されたレコードに関する別の情報を格納しますか? –

+0

ブックマークが特定のdescendanfまたはTDatasetでどのように実装されているかによって異なりますが、一般的なもののいずれかがレコード番号を使用する場合は驚きます。私が見てきたいくつかのものから、通常、実装固有のデータを含むバッファを使用します。特定のタイプのデータセットでブックマークが実装されているかどうか不明な場合は、BookmarkValid関数を呼び出します(OLHを参照)。 – MartynA

+0

ありがとうございました、私は、削除されたレコードのGetBookmarkとGotoBookmarkを試しました:GetBookmark - > Delete Selected(Bookmarked)Record - > GotoBookmark、そしてエラーが出ました: "レコードが見つかりませんでした"この状況で私はRecNoを使うべきだと思う、私はRecNoを試してみるとうまくいく –

関連する問題