【发布时间】:2012-01-10 05:49:49
【问题描述】:
可能重复:
How to avoid TDbgrid scrolling when returning to a previous location
我正在寻找一种在刷新发生后保存和恢复 Delphi TDBGrid 的垂直滚动位置的方法。目前,网格会自行重置,以便所选记录出现在记录列表的中间。
起初,LeftCol 和 TopRow 属性似乎是解决方案,但只有 LeftCol 有效。 TopRow 值始终为 1,并且永远不会改变。它似乎是网格内部记录缓冲区中的一个位置,该位置设置为网格中显示的行数。也就是说,FBuffers 似乎上下滑动,但TopRow 始终保持为 1。
我所看到的详细示例是:
- 网格显示
TClientDataSet的11条记录,从记录5开始,依次显示到记录15。 - 选定的记录光标位于记录 15(视图中的最后一条记录)上。
- 数据集通过链接到
TADODataSet的TDataSetProvider刷新。 (一个 .Open 或 .Refresh 调用)。 - dataset.Locate 方法用于在插入/删除时保留实际选择的记录。
- 网格发生变化,使记录 15 位于中心,并显示记录 10 到 20。
是否可以保存/恢复/执行任何操作,以便网格可以恢复到其原始查看配置,显示记录 5-15,光标位于同一选定记录上,无论它出现在何处?
在我的多次搜索尝试中,我能找到的最接近的问题是在 Delphi 3.0 中使用 TopRow、LeftCol 解决的问题,此处:http://www.delphigroups.info/2/79/314206.html
通过 DBGrids.pas 探索也没有让我找到一种相对于底层数据集记录定位缓冲区指针的方法。
【问题讨论】: