Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 基于筛选器隐藏ListViewItem_C#_Search_Listview_Listviewitem - Fatal编程技术网

C# 基于筛选器隐藏ListViewItem

C# 基于筛选器隐藏ListViewItem,c#,search,listview,listviewitem,C#,Search,Listview,Listviewitem,我想根据ListView(WinForms)中的文本过滤器隐藏一些项目。 基本上,listview从文本文件加载项目,我不希望在用户搜索列表时读取和/或写入这些项目。搜索在组合框的KeyDown事件中完成,但ListViewItem没有“可见”属性 有没有简单的方法可以做到这一点,而无需重新读取文件? (由于它是一个XML文件,甚至可能包含数千个项目,因此很难高效搜索,甚至无法让用户使用该应用程序,因为搜索需要几分钟时间(主要是加载))。我不清楚您想做什么。我仍然会大声说出一些想法,也许有些东西

我想根据ListView(WinForms)中的文本过滤器隐藏一些项目。
基本上,listview从文本文件加载项目,我不希望在用户搜索列表时读取和/或写入这些项目。搜索在组合框的KeyDown事件中完成,但ListViewItem没有“可见”属性

有没有简单的方法可以做到这一点,而无需重新读取文件?
(由于它是一个XML文件,甚至可能包含数千个项目,因此很难高效搜索,甚至无法让用户使用该应用程序,因为搜索需要几分钟时间(主要是加载))。

我不清楚您想做什么。我仍然会大声说出一些想法,也许有些东西是有用的

  • 将文件缓存在内存中
  • 缓存读取的项目并动态填充输入框
  • 相应地添加和删除项目
  • 看看
  • 也许是吧

对不起,如果我误解了你(

由于每次添加/删除操作都会重新绘制列表框,您可能会遇到延迟。请尝试将添加/删除操作包装在开始/结束更新方法中,如下所示

myListView.BeginUpdate();
//Add or Remove Items
myListView.EndUpdate();
现在感受一下速度


当然,您只需加载一次文件。

解决方法是创建一个单独的类来存储数据,并在加载文件后进行搜索


虽然对文件进行更改仍然是一个问题,但这是另一个问题…

这不是最好的答案,但也是我找到的最好的解决方案。您可以自己实现事件来执行以下操作:

    void listView_DrawItem(object sender, DrawListViewItemEventArgs e)
    {               
        if (Should_Filter(e.Item) == false)
            e.DrawDefault = true;                   
        else
            e.DrawDefault = false;
    }

然后对所有项目重新排序,使筛选后的项目位于ListView的末尾。这会有点隐藏它们,但ListView在计算其大小时仍会计算它们,因此您也应该强制调整ListView clientsize的大小。

您能告诉我们更多关于环境的信息吗?WinForms?WPF?当然WinForms,我对WPF不太感兴趣。我知道,我知道我必须学习它,但我只有在我真的必须学习的时候才会学习。现在你可能必须,利用虚拟化。我想动态修改可见属性…或者我想,因为它不存在…至少对我来说!基本解决方案是添加和删除项目,我想。是的,我知道会,但正如我指出的,制作一个simple数据库不会那么容易,因为我们正在谈论成千上万的项目…我想我会继续在谷歌上搜索带有Visible属性的个性化ListViewItem类…或者我应该改为DataGridView吗?它甚至支持自动复选框吗?我不明白为什么不能将项目存储在列表中?添加并删除将ListView中的项目保存到此备份列表中/从此备份列表中删除。无需多次解析源文件。是的,也许这是一个好主意…但仍需要更多内存。Visible属性将使其更容易:D