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

时间:2015-04-28 11:21:02

标签: delphi delphi-xe2

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

query.Close;
query.Open;

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

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

感谢。

我做了以下事情..

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

端;

但现在收到错误消息找不到数据集的书签。

我们非常感谢任何建议。

1 个答案:

答案 0 :(得分:4)

要刷新数据集,请调用Refresh方法并记住数据集光标位置使用书签。您通过调用GetBookmark来查询当前光标位置的书签,刷新数据集并通过调用GotoBookmark移至书签位置:

var
  Bookmark: TBookmark;
begin
  Bookmark := Query.GetBookmark;
  Query.Refresh;
  Query.GotoBookmark(Bookmark);
end;

您无需调用FreeBookmark来释放Delphi版本中的书签,因为TBookmark类型变为动态数组,因此在编译时会由编译器管理功能范围。