簡體   English   中英

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(毫秒),以這種方式使用計時器可以有效地等待您輸入“暫停呼吸”,而不是嘗試在每次按鍵時更新 gui。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM