重複の可能性:
前の場所に戻るときにTDbgridのスクロールを回避する方法
TDBGrid
更新が発生した後、Delphiの垂直スクロール位置を保存および復元する方法を探しています。現在、グリッドはそれ自体をリセットして、選択したレコードがレコードのリストの中央に表示されるようにします。
最初は、プロパティLeftCol
とTopRow
が解決策のように見えましたが、機能するだけLeftCol
です。TopRow
値は常に1であり、変更されることはありません。これは、グリッドに表示されている行数に設定されている、グリッドの内部レコードバッファーへの位置のように見えます。つまり、FBuffersは上下にスライドしているように見えますが、常にTopRow
1のままです。
私が見ているものの詳細な例は次のとおりです。
- グリッドには
TClientDataSet
、レコード5から始まる11個のレコードが表示され、レコード15まで順番に表示されます。 - 選択したレコードカーソルは、レコード15(ビューの最後のレコード)にあります。
TDataSetProvider
データセットは、にリンクされて更新されTADODataSet
ます。(.Openまたは.Refresh呼び出し)。- dataset.Locateメソッドは、挿入/削除に直面しても実際に選択されたレコードを保持するために使用されます。
- レコード15が中央になり、レコード10から20が表示されるように、グリッドが変更されます。
グリッドを元の表示構成に復元して、同じ選択されたレコードにカーソルを置いてレコード5〜15を表示できるように、保存/復元/実行できるものはありますか?
多くの検索試行で私が見つけることができる最も近いものは、Delphi 3.0でTopRow、LeftColを使用して解決された問題です。http://www.delphigroups.info/2/79/314206.html
DBGrids.pasを介して洞窟探検することは、基礎となるデータセットレコードに相対的なバッファーポインターを見つける方法を私に与えません。