5

重複の可能性:
前の場所に戻るときにTDbgridのスクロールを回避する方法

TDBGrid更新が発生した後、Delphiの垂直スクロール位置を保存および復元する方法を探しています。現在、グリッドはそれ自体をリセットして、選択したレコードがレコードのリストの中央に表示されるようにします。

最初は、プロパティLeftColTopRowが解決策のように見えましたが、機能するだけLeftColです。TopRow値は常に1であり、変更されることはありません。これは、グリッドに表示されている行数に設定されている、グリッドの内部レコードバッファーへの位置のように見えます。つまり、FBuffersは上下にスライドしているように見えますが、常にTopRow1のままです。

私が見ているものの詳細な例は次のとおりです。

  • グリッドには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を介して洞窟探検することは、基礎となるデータセットレコードに相対的なバッファーポインターを見つける方法を私に与えません。

4

1 に答える 1

6

これらの質問はあなたに答えを与えるはずです:
前の場所に戻るときにTDbgridのスクロールを回避する方法
Delphi - DBGridの実際の行を復元する
(特にこの回答

于 2012-01-09T20:25:39.490 に答える