刷新Query/cxGrid而不会丢失所选记录

Sha*_*pie 5 delphi delphi-xe2

我知道执行以下操作会刷新查询.

query.Close;
query.Open;
Run Code Online (Sandbox Code Playgroud)

但是在这之后它将焦点设置回cxGrid上的第一条记录.

刷新查询后有没有办法让当前记录保持选中状态?

谢谢.

我做了以下......

procedure Tdatamodule.RefreshGrid;
var pos : tbookmark;
begin
pos := qryMainGrid.GetBookmark;
try
  qryMainGrid.Close;
  qryMainGrid.Open;
  qryMainGrid.GotoBookmark(pos);
finally
  qryMainGrid.FreeBookmark(pos);
end;
Run Code Online (Sandbox Code Playgroud)

结束;

但现在获取数据集未找到错误消息书签.

任何建议将不胜感激.

Ger*_*lí- 5

要刷新数据集,请调用该Refresh方法并使用书签记住数据集光标位置。您可以通过调用查询当前光标位置的书签GetBookmark,刷新数据集并通过调用移动到添加书签的位置GotoBookmark

var
  Bookmark: TBookmark;
begin
  Bookmark := Query.GetBookmark;
  Query.Refresh;
  Query.GotoBookmark(Bookmark);
end;
Run Code Online (Sandbox Code Playgroud)

您不需要FreeBookmark在 Delphi 版本中调用释放书签,因为该TBookmark类型变成了动态数组,因此当它超出函数范围时由编译器管理。