TFDMemTable 过滤器没有响应我的 TEdit OnChangeTracking

TFDMemTable filter not responding to my TEdit OnChangeTracking

我有来自 API 的 TFDMemTable 数据。 TFDMemTable 与 TListView 实时绑定。这里棘手的部分是,我想在 TListView 中仅使用 TEdit 控件的 OnChangeTracking 事件显示过滤后的数据。

这是我用来实现预期结果的代码,但不幸的是,它没有返回任何内容。

procedure TformMain.edtSearchBoxChangeTracking(Sender: TObject);
var
  metastr : string;
begin
  metastr := edtSearchBox.text;   //edtSearchBox is my TEdit control
  with dmMain_u.dmMain do
  begin
    mtbMeta.Active := False;      //mtbMeta is my TFDMemTable
    mtbMeta.Filtered := False;
    mtbMeta.Filter := 'meta LIKE ' + QuotedStr('%' + metastr + '%');
    mtbMeta.Filtered := True;
    mtbMeta.Active := True;
  end;
end;

这里有人可以检查我的代码是否正确吗?或者我可能需要做其他事情?

我会删除 .Active := False 和 .Active := True。它们与调用 .Close 和 .Open 相同,Close 将导致 mtbMeta 丢失数据。

至于你在评论中提到的缓慢,通常的解决方法是这样的:

procedure TformMain.edtSearchBoxChangeTracking(Sender: TObject);
var
  metastr : string;
begin
  Timer1.Enabled := True;
end;

并将 q 中剩余的代码放入 Timer1 的 OnTimer 事件中。将其时间间隔设置为 150 或 200(毫秒),以这种方式使用计时器可以有效地等待直到您输入 "pauses for breath",而不是尝试在每次按键时更新 gui。