1

我处于需要显示树的情况。然而,一些节点有 35000 个子节点(直接子节点!)。这当然是在可用性方面放慢速度的方式。

我宁愿看到树只加载那些在浏览器视口中可见的节点。

WinForms 和 C++ 中存在这样的树,你们中有人知道 ASP.NET 中是否存在这样的树吗?

我们目前正在使用Telerik Treeview,这是一个可爱的控件,但不支持所描述的情况。

额外的问题

从可用性的角度来看:你如何处理这样的树。在一个级别上显示 35000 个节点很好,但是你如何在那棵树中找到一些东西呢?你在树中使用分页吗?还是搜索框?或者也许增加额外的水平?

4

2 回答 2

2

有了这么多节点,即使您可以找到一种高效的方式来显示它们,您的用户也可能不会很容易使用它。想象一下尝试滚动 35,000 个节点只是为了找到您感兴趣的节点!分页也是如此。用户真的要浏览 3500 页(假设页面大小为 10)来找到他们的目标吗?可能不会,如果他们这样做了,他们可能不会太高兴。:)

相反,对于像这样的大型数据集,我发现通常最好提供某种类型的“过滤器”UI。使您的用户能够将可用数据“塑造”成更易于管理的集合的东西。

我不确定您必须提供哪些过滤功能(即您可以过滤哪些字段),但我认为这是您最好的选择。UI 的选项包括:

  1. 像 RadGrid for ASP.NET AJAX 这样的东西可以提供内置的过滤 UI,使用户能够快速找到他们感兴趣的值。
  2. 使用 RadTreeView 的客户端 API 并支持按需加载节点,您可以创建一个文本框,在用户键入时过滤树中的节点。您只需处理 TextBox 的 onkeyup 事件,然后向 Web 服务发出请求以获取满足过滤条件的节点,并用结果替换 TreeView 的节点集合。这将使您的用户容易找到他们的目标节点。

显然还有其他方法,但希望这能给你一些想法。

简短回答:对于大型数据集,我会结合使用实时过滤和 Web 服务来向我的用户呈现更易于管理的结果集。对于初始加载,我只会加载第一个(比方说)200 个节点以保持高性能。

希望这可以帮助!-托德

于 2009-05-07T17:58:17.677 回答
1

我知道有一些 jQuery 驱动的树控件。不知道手头的名字。ASP.NET 树控件肯定不支持这一点,因为它不是 AJAXifiable。对于显示 35000 个节点的问题,我会像这样对它们进行分页。

node
|
-- Sub Node 1
|
-- ...
|
-- Sub Node n
|
-- more...

当您将鼠标悬停在更多或单击它时,它将获得更多节点。如果您要显示 100 个子节点,我会加载 200 个并隐藏其他 100 个。这样,当您将鼠标悬停在更多子节点上时,它会立即显示。每次你将鼠标悬停在更多...下一个隐藏的 100 被加载。

此外,现在使用所有高级浏览器创建自定义树控件并不难,使用<ul><li>嵌套创建节点和子节点,然后应用适当的样式。<li>如果您想让整个点击更容易,可以在其中包含链接。

我的两分钱。

于 2009-05-07T17:57:25.150 回答