0

我需要帮助解决以下问题。我有一个 dbgrid,底层查询被过滤。我想应用一个新的过滤器,但在 dbgrid 中保持相同的行号。这是我的代码:

with qrProperties do
begin
  ...
  MyPoint:=GetBookmark;
  Filter:='N<>'+IntToStr(ResultPropertyN);
  Filtered:=True;
  GotoBookmark(MyPoint);
end;

当它被执行时,会引发 EDBEngineError 并显示消息“找不到记录”。我的解释是书签函数没有考虑过滤器,并且 GotoBookmark 过程搜索 dbgrid 中不存在的记录(由于应用了过滤器)。有没有办法使用带有过滤器的书签?

这里有更多细节。在我的应用程序中,当我双击 dbgrid 中的一行时,它会消失(由于应用了过滤器),但由于过滤,光标会移动到第一行(如果我不使用书签)。我希望它保持在相同的行号上,该行号将转到已删除的记录之后立即显示的记录。

4

1 回答 1

1

您的假设是正确的,记录不再“存在”。

将 GotoBookmark 包装在 try/except 中并决定在异常中做什么,例如转到第一条记录。

或者,您可以转到您可以找到的“最近”记录。这取决于您认为“最近”的内容,然后您根本不需要书签并使用例如 FindNearest。

于 2013-05-07T08:35:18.310 回答