Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.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
String 在WinForms listbox/listview控件中显示大量字符串_String_Winforms_Listview_Data Binding_Listbox - Fatal编程技术网

String 在WinForms listbox/listview控件中显示大量字符串

String 在WinForms listbox/listview控件中显示大量字符串,string,winforms,listview,data-binding,listbox,String,Winforms,Listview,Data Binding,Listbox,我的WinForms UI包含一个带有两个选项卡页的选项卡控件。在一个选项卡上,我需要以允许我的用户在列表中添加、编辑和删除字符串的方式显示最多100000个字符串的列表。在第二个选项卡上,我需要显示第一个选项卡中字符串的“只读”副本。我还需要第二个选项卡上的控件,允许用户将字符串从“只读”列表复制到第二个不相关的列表中 我目前有一个数组中的100k字符串,我的第一个想法是使用列表框来显示它们。我可以在数组中循环,并将字符串分别添加到第一个选项卡上的列表框中。如果使用SuspendLayout(

我的WinForms UI包含一个带有两个选项卡页的选项卡控件。在一个选项卡上,我需要以允许我的用户在列表中添加、编辑和删除字符串的方式显示最多100000个字符串的列表。在第二个选项卡上,我需要显示第一个选项卡中字符串的“只读”副本。我还需要第二个选项卡上的控件,允许用户将字符串从“只读”列表复制到第二个不相关的列表中

我目前有一个数组中的100k字符串,我的第一个想法是使用列表框来显示它们。我可以在数组中循环,并将字符串分别添加到第一个选项卡上的列表框中。如果使用SuspendLayout()和BeginUpdate(),则显示大约需要1.5秒。不幸的是,当我向一个列表框添加超过65k个项目时,会出现垂直滚动条问题(显然这是在Vista时代引入的listbox控件中的一个bug)。因为字符串数据没有绑定到列表框,所以我基本上是将相同的整个数据集添加到第二个选项卡上的另一个列表框中。现在,如果我启动我的应用程序,等待字符串添加到列表框中,然后尝试选择第二个选项卡,那么在等待第二个选项卡响应时,性能会非常慢。我假设这与列表框中的数据量有关。无论如何,一旦第二个选项卡响应,我就可以在两个选项卡页面之间切换,而延迟要小得多

作为测试,我尝试将两个列表框绑定到数组,但从性能角度看,这没有任何区别。滚动错误可能会使列表框成为我无法使用的选项。因此,我尝试了列表模式下的listview控件,其中有一个隐藏的列标题。当我将字符串数据作为单独的ListViewItems添加时,性能没有太大不同。我打算尝试将两个listview控件绑定到我的数组中,但listview控件似乎不支持设计时数据绑定,而且我不确定如果我自己尝试实现它,会有多大的不同


我知道100000个字符串(最大值)是用户需要处理的大量数据,但这是一项要求,用户必须能够看到应用程序中的所有字符串数据(最坏的情况是我的QA团队将首先开始测试!)。是否有另一个控件可用于我所需的大量数据和功能?还是说我的想法完全错了?

我不认为你会通过一次为用户提供超过50个字符串来帮助用户。有了DataGridView,您可以按需加载,这更适合于此。看见或者,您可以在用户输入时手动将项目加载到listbox,这样更好。在这方面,试着说服客户,一次使用10万个字符串只会弊大于利

我确实认为DataGridView太多了,无法显示简单的字符串,但它提供了灵活性,可以在将来提供更多功能(如更多列等)。至于如何将大量数据填充到gridiview中,进行搜索,它上有很多线程。这里有两个好的开始


正如我所说,最好的选择是重新考虑设计。

我不认为你会通过一次为用户提供超过50个字符串来帮助用户。有了DataGridView,您可以按需加载,这更适合于此。看见或者,您可以在用户输入时手动将项目加载到listbox,这样更好。在这方面,试着说服客户,一次使用10万个字符串只会弊大于利

我确实认为DataGridView太多了,无法显示简单的字符串,但它提供了灵活性,可以在将来提供更多功能(如更多列等)。至于如何将大量数据填充到gridiview中,进行搜索,它上有很多线程。这里有两个好的开始

正如我所说的,最好的选择是重新考虑设计。

我们有一个类似的(~exact)问题。 “重新设计”的建议解决方案并非真正的解决方案。 认为用户不能真正使用(或不需要)看到“数以百万计”的物品的想法绝对不是100%正确的,这是一种假设。 在我们的例子中,用户需要能够滚动(查看)许多(100k+)项。。。。 是的,这是很容易做到的&人类需要使用我们的软件来处理有组织的扫描三维坐标数据

因此,仍然需要一个ListView控件,它允许大量项替换system.windows.forms.ListBox(如C#中所用)。 Visual Studio C#2012提供的NET system.windows.forms.ListBox允许较大的列表,但在itmes计数接近60000+时不允许正确滚动

就是这样

我们有一个类似的(~确切的)问题。 “重新设计”的建议解决方案并非真正的解决方案。 认为用户不能真正使用(或不需要)看到“数以百万计”的物品的想法绝对不是100%正确的,这是一种假设。 在我们的例子中,用户需要能够滚动(查看)许多(100k+)项。。。。 是的,这是很容易做到的&人类需要使用我们的软件来处理有组织的扫描三维坐标数据

因此,仍然需要一个ListView控件,它允许大量项替换system.windows.forms.ListBox(如C#中所用)。 Visual Studio C#2012提供的NET system.windows.forms.ListBox允许较大的列表,但在itmes计数接近60000+时不允许正确滚动

就是这样