2012-12-15 51 views
1

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

我目前有一个数组中的100k字符串,我的第一个想法是使用列表框来显示它们。我可以遍历数组并单独将字符串添加到第一个选项卡上的列表框。如果我使用SuspendLayout()和BeginUpdate(),则需要大约1.5秒的时间来显示。不幸的是,当我向列表框中添加超过65k条目时(显然这是在Vista附近引入的列表框控件中的一个错误),存在垂直滚动条问题。由于字符串数据没有绑定到列表框,我基本上将同样的整个数据集添加到另一个列表框中的第二个选项卡上。现在,如果启动我的应用程序,请等待将字符串添加到列表框中,然后尝试选择第二个选项卡,但性能非常慢,等待第二个选项卡变得响应。我假设这与列表框中的数据量有关。无论如何,一旦第二个选项卡变得响应,我可以在两个选项卡页面之间切换,延迟时间要少得多。

作为一个测试,我尝试将两个列表框绑定到数组,但是从性能角度来看它没有任何区别。无论如何,滚动错误可能会让列表框无法使用。所以然后我用单个隐藏列标题以列表模式尝试列表视图控件。当我将字符串数据添加为单独的ListViewItems时,性能没有太大的不同。我试着将两个listview控件绑定到我的数组,但它看起来像listview控件不支持设计时数据绑定,我不确定如果我试图自己实现它,它会有很大的不同。

我知道100,000个字符串(最大)是一个用户要处理的大量数据,但这是一个要求,使用时能够看到应用程序中的所有字符串数据(最坏的情况是我的第一件事QA团队将开始测试!)。是否有另一种控制方式可以适用于我需要的大量数据和功能?或者我只是想解决这个问题?

回答

1

我不认为你会永远为用户提供超过50个字符串的帮助。使用DataGridView,您可以根据需要加载,这更适合于此。见VirtualMode。否则,您可以在用户输入上手动将项目加载到列表框,这样会更好。试着说服那个客户说,一次只有10万个字符串会带来更多的伤害。

我认为DataGridViews将显示太多以显示简单的字符串,但为您提供在未来提供更多功能的灵活性(如更多列等)。至于如何将大量数据填充到gridiview中,请执行搜索,其中有很多线程。这里有两个很好的首发

http://www.codeproject.com/Articles/38735/Load-a-billion-rows-in-a-DataGridView

What's better to use: a DataGrid or ListView for displaying large amounts of data?

正如我说,最好的选择是重新思考设计 ..

0

我们有一个类似的(确切的〜)问题。 “重新设计”的建议解决方案并非真正的解决方案。 用户无法真正使用(或不需要)查看物品的“gazillions”的想法绝对不是100%正确的,并且会做出假设。 在我们的例子中,用户需要能够滚动(看)许多(100k +)物品.... 是的,这是人类使用我们的软件处理有序扫描的三维坐标数据所需的&。

Soooo仍然需要一个ListView控件,它允许大量的项目替换system.windows.forms.ListBox(如C#中使用的)。 随Visual Studio C#2012提供的NET system.windows.forms.ListBox允许大型列表,但当它的计数接近〜60,000 +时,不允许正确的滚动。

就是这样!