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