【发布时间】:2013-10-11 09:49:32
【问题描述】:
我设法通过一个 TEdit 创建了一个“搜索”栏,它可以搜索我从里面输入的任何内容 一个 ListView,它从数据库中获取其信息,并通过一个过滤器并在按下一个键后即时更新 ListView 的项目。
现在我正在尝试学习如何实现一种方法来暂时限制我在 ListView 中获得的结果,直到我按下“显示更多”按钮或类似的按钮以获得更多相关结果。
由于数据库可能会在我按下“A”时返回超过 500 个结果,这对手机的功能来说是苛刻的,所以我需要该功能来使我的搜索按钮更有效。
有人能给我一些关于我可以使用什么来制作这样的东西的指示吗?
编辑。
我用于在 ListView 中搜索的当前代码是这样的......
procedure TContactsForm.Edit1ChangeTracking(Sender: TObject);
var
Lower: string;
i: integer;
begin
Lower:= LowerCase(Edit1.Text.Trim);
if Lower= '' then
begin
if Filtered then
begin
ListView1.Items.Filter := nil;
ListView1.ItemIndex := BindSourceDB1.ComponentIndex;
end;
end
else
begin
ListView1.ItemIndex := -1;
ListView1.Items.Filter :=
function(X: string): Boolean
begin
Result:= (Lower = EmptyStr) or LowerCase(X).Contains(Lower);
end;
end;
end;
function TContactsForm.Filtered: Boolean;
begin
Result := Assigned(ListView1.Items.Filter);
end;
【问题讨论】:
-
我的第一个建议是使用网格而不是列表视图。当您在用户键入时快速更新列表时,列表视图可能会大大落后,导致很多结果。
-
谢谢,我会记住这一点,但我正在考虑 ListView 组件,因为我认为它的单元格从可以包含更多内容的方面来说更加灵活。
-
考虑限制返回结果的数量。谷歌做到了 4。
-
当 ListView 通过 BindSourceDB 从数据集中填充时,我可以这样做吗?
标签: delphi listview firemonkey searchbar