0

我有来自 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;

这里的任何人都可以尝试检查我的代码是否正确?或者我可能需要做其他事情?

4

1 回答 1

1

我会删除 .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(毫秒),以这种方式使用计时器可以有效地等待您输入“暂停呼吸”,而不是尝试在每次按键时更新 gui。

于 2020-06-01T12:27:45.570 回答