【问题标题】:How can I restore a TDBGrid record view to the condition before a refresh? [duplicate]如何将 TDBGrid 记录视图恢复到刷新前的状态? [复制]
【发布时间】:2012-01-10 05:49:49
【问题描述】:

可能重复:
How to avoid TDbgrid scrolling when returning to a previous location

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

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

我所看到的详细示例是:

  • 网格显示TClientDataSet的11条记录,从记录5开始,依次显示到记录15。
  • 选定的记录光标位于记录 15(视图中的最后一条记录)上。
  • 数据集通过链接到TADODataSetTDataSetProvider 刷新。 (一个 .Open 或 .Refresh 调用)。
  • dataset.Locate 方法用于在插入/删除时保留实际选择的记录。
  • 网格发生变化,使记录 15 位于中心,并显示记录 10 到 20。

是否可以保存/恢复/执行任何操作,以便网格可以恢复到其原始查看配置,显示记录 5-15,光标位于同一选定记录上,无论它出现在何处?

在我的多次搜索尝试中,我能找到的最接近的问题是在 Delphi 3.0 中使用 TopRow、LeftCol 解决的问题,此处:http://www.delphigroups.info/2/79/314206.html

通过 DBGrids.pas 探索也没有让我找到一种相对于底层数据集记录定位缓冲区指针的方法。

【问题讨论】:

    标签: delphi tdbgrid


    【解决方案1】:

    【讨论】:

    • 我是 François 的第一个链接(“如何避免...”)的 OP,并在上个月实施了 Sertac 的解决方案(“尤其是这个答案”)。它对我来说非常有效。
    • 我将“esp.this answer”合并到我的解决方案中。它工作得很好。有点希望我在发布欺骗之前发现它,但非常感谢你为我指明了正确的方向。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-22
    • 1970-01-01
    • 1970-01-01
    • 2020-04-10
    • 1970-01-01
    • 2017-03-05
    • 1970-01-01
    相关资源
    最近更新 更多