请帮忙。
你试过这个jQuery插件吗?http://www.jstree.com/
它支持AJAX加载,非常适合2000个节点的树形结构。
一定还有其他的问题。我对TreeView进行了性能测试,并能够在远少于40秒的时间内渲染包含5000个节点的复杂树结构。在IE8中,2000个节点的复杂树形结构渲染大约需要3秒钟。如果您可以提供有关树的更多细节,我可以提供更多的帮助。
我已经阅读过渲染HTML的数量是在处理大型树形结构时所需时间的最大因素之一。甚至简单的事情,例如通过缩短页面名称(如果您的节点直接链接到页面)来减少URL字符串的长度,或者用更高级的样式表使用技术替换CSS类,都可以使树形结构渲染速度快得多。
以下是我生成随机复杂树形结构代码的_nodeCount
大小:
ASPX页面上有一个名为tv的TreeView:
<asp:TreeView ID="tv" runat="server"></asp:TreeView>
代码后台看起来像下面这样:
private Random _rand = new Random();
private int _nodeCount = 2000;
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
//create a big tree
var itemCount = 0;
while (itemCount < _nodeCount)
{
//create a parent item
var n = new TreeNode("Node " + itemCount.ToString(), itemCount.ToString());
itemCount++;
tv.Nodes.Add(n);
CreateSubItem(n, ref itemCount);
}
}
}
protected void CreateSubItem(TreeNode parent, ref int itemCount)
{
//chance that we won't create a sub item
if (_rand.Next(2) == 1 || itemCount > _nodeCount)
{
return;
}
var n = new TreeNode("Child Node " + itemCount.ToString(), itemCount.ToString());
itemCount++;
parent.ChildNodes.Add(n);
CreateSubItem(n, ref itemCount);
CreateSubItem(parent, ref itemCount);
}
更新 7/20
也许你可以将设置图标的 JavaScript 逻辑移植到 .NET 代码中,这应该会大大减少页面加载时间。这个页面 http://weblogs.asp.net/dannychen/archive/2006/01/25/436454.aspx 展示了如何自定义 TreeNode 的渲染;也许它可以成为你的一个好的起点。
当您打开从树形视图生成的呈现HTML时,您会发现该控件生成了大量的HTML表格、tr和td,我认为这需要很长时间才能在IE上呈现,因此建议您创建一个新的自定义Web控件,该控件继承自TreeView控件并更新“Render Method”以编写Div而不是HTML,这将需要专业的开发人员和HTML设计师来完成。
我认为您可以在此之后与社区共享这个新控件,我们可以与您一起改进它,以摆脱这个虚拟的ASP.NET GridView。
在您的应用程序中使用AJAX并通过AJAX动态加载树形视图始终是一个好习惯。这里有一个链接...
设置属性HoverNodeStyle-CssClass="nh"会使得在IE9中呈现TreeView的速度变慢。我移除了这个属性,性能恢复了。