我想基于ListView(WinForms)中的文本过滤器隐藏一些项目 基本上listview加载文本文件中的项目,我不希望在用户搜索列表时读取和/或写入它。搜索是在组合框的KeyDown事件中完成的,但ListViewItem没有“Visible”属性。
有没有简单的方法可以做到这一点,没有重新读取文件? (因为它是一个XML文件,它甚至可能包含数千个项目,所以很难有效搜索甚至让用户使用该应用程序,因为搜索需要几分钟(主要是加载))。
答案 0 :(得分:2)
由于每次添加/删除操作都会重新绘制列表框,因此可能会遇到延迟。尝试在这样的开始/结束更新方法中包装你的添加/删除操作。
myListView.BeginUpdate();
//Add or Remove Items
myListView.EndUpdate();
现在感受速度。
当然,您只需加载一次文件。
答案 1 :(得分:1)
我不清楚你要做什么。我仍然会大声说出一些想法,也许有些有用......
抱歉,如果我弄错了。 :(
答案 2 :(得分:0)
解决了创建一个单独的类来存储数据,并在加载文件后进行搜索。
虽然写文件的更改仍然是一个问题,但这是另一个故事...
答案 3 :(得分:0)
这不是最佳答案,但有点是我发现的最佳解决方案。您可以自己实施ListView.DrawItem事件来执行以下操作:
void listView_DrawItem(object sender, DrawListViewItemEventArgs e)
{
if (Should_Filter(e.Item) == false)
e.DrawDefault = true;
else
e.DrawDefault = false;
}
然后重新排序所有项目,以便过滤后的项目位于ListView的末尾。这有点隐藏它们,但ListView在计算它的大小时仍会计算它们,所以你也应该强制调整ListView客户端大小。