5

可能重复:
返回上一个位置时如何避免 TDbgrid 滚动

我正在寻找一种TDBGrid在刷新发生后保存和恢复 Delphi 垂直滚动位置的方法。目前,网格会自行重置,以便所选记录出现在记录列表的中间。

起初,属性LeftColTopRow似乎是解决方案,但只能LeftCol工作。该TopRow值始终为 1,并且永远不会更改。它似乎是网格内部记录缓冲区中的一个位置,该位置设置为网格中显示的行数。也就是说,FBuffers 似乎上下滑动,但TopRow始终保持为 1。

我所看到的一个详细示例是:

  • 网格显示 a 的 11 条记录TClientDataSet,从记录 5 开始,依次显示到记录 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

似乎这些问题应该给你答案:
How to Avoid TDbgrid scrolling when returned to a previous location
Delphi - restore actual row in DBGrid
(esp. this answer )

于 2012-01-09T20:25:39.490 回答