在不丢失选定记录的情况下刷新查询/cxGrid

Refresh Query / cxGrid without losing selected record

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

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;

结束;

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

如有任何建议,我们将不胜感激。

要刷新数据集,请调用 Refresh method and to remember the dataset cursor position use the bookmark. You query for the bookmark to the current cursor position by calling GetBookmark, refresh the dataset and move to the bookmarked position by calling GotoBookmark:

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

您不需要调用 FreeBookmark to free the bookmark in your Delphi version because the TBookmark type 成为动态数组,因此当它超出函数范围时由编译器管理。