如何快速显示大量数据

时间:2009-09-12 22:37:20

标签: windows tree

我有一个大型数据库表,我需要在Windows窗体上显示。数据是某种“类别列表”,我需要以类似树视图的结构向用户显示,有些类别包含更多子类别。 Treeview控件有延迟加载但问题是可能有十万个根节点有4个列字符串值。我尝试将100000个节点添加到树视图中,并且需要5分钟才能完成。这样的操作还有其他选择吗?你能给我任何想法吗? 不是树视图..

5 个答案:

答案 0 :(得分:2)

这是很多节点,但是当您将节点列表添加到树视图时,您是否尝试调用BeginUpdate()然后调用EndUpdate()?这可能会让你的表现有点上升!

http://msdn.microsoft.com/en-us/library/system.windows.forms.treeview.beginupdate.aspx

对于这样的应用程序,我倾向于实现诸如“在键入时搜索”等功能,这些功能会在键入文本框时返回类别名称。例如,在每次击键时,我会返回到DB并返回前10个左右的值,这些值以文本框中的内容开头。如果结果超过10个,我要么表示存在更多结果,要么告诉他们改进搜索结果。 IMO直接搜索总是胜过排序和/或分页。我讨厌分页。几乎总是承认你的搜索功能不够好!

答案 1 :(得分:1)

也许实现某种分页机制。从用户的角度来看,TreeView中的100,000个项目将非常难以阅读。一次只提供1,000个甚至更少的根节点肯定会减少加载时间。

答案 2 :(得分:1)

您可以使用缓存功能。 20000条记录通常需要加载0.2秒。检查语言支持以便使用它。

的问候,

答案 3 :(得分:1)

TreeView有一个事件BeforeExpand。您可以使用它来确定要加载哪个节点内容。也就是说,首先只加载TreeView中的顶级节点。

如果用户即将展开节点,您可以获取所需数据并填充该节点的子节点。使用TreeNode的Tag属性存储数据属于哪个节点的ID。

确保使用BeginUpdate()和EndUpdate()或使用AddRange()而不是Add()来添加节点,因为它更快。

答案 4 :(得分:0)

我决定为树视图实现虚拟/服务器模式。

感谢您的回答。