一个树有 3000-5000 个节点左右,树有2个地方要用,一个是 对树的 添加,修改,删除,另外一个地方是设置权限,对树添加了 checkbox,目前使用是 MZtreeview , 但是发现 2000 个节点的时候马马虎虎,多了就 不能用了..大家有什么好解决方案:数据都是从数据库 读取出来的(有点慢) 数据库结构id(节点) ,fatherid(父节点) ,text(文本)
一个树有 3000-5000 个节点左右,树有2个地方要用,一个是 对树的 添加,修改,删除,另外一个地方是设置权限,对树添加了 checkbox,目前使用是 MZtreeview , 但是发现 2000 个节点的时候马马虎虎,多了就 不能用了..大家有什么好解决方案:数据都是从数据库 读取出来的(有点慢) 数据库结构id(节点) ,fatherid(父节点) ,text(文本)
个人认为,都是不合理的这么多节点肯定有一个先过滤的过程,试想用户要找第10级的某个节点,他需要点多少次,即时AJAX又要等多久,才能到达目的地?展开10级之后,占据多大的空间?如何布局?眼花缭乱!
当然搜索过滤之后,可能导致某些非叶节点未包含进来,那么一颗完整的树,如何建立?这也是一个需要思考的问题
protected string LoadTree()
{ string connString = ConfigurationManager.ConnectionStrings["ConnStr"].ConnectionString;
string sql = "SELECT dan_id , dan_fatid , dan_text FROM danger where dan_id is not null and dan_fatid is not null and dan_text is not null";
string tree = ""; using (SqlDataReader dr = SqlHelper.ExecuteReader(connString, CommandType.Text, sql))
{
while (dr.Read())
{
tree += "tree.N[\"" + dr.GetString(1) + "_" + dr.GetString(0) + "\"] = \"T:" + dr.GetString(2) + "; D:id=" + dr.GetString(0) + "\"\r\n";
}
}
return tree;
}第二个 原因 就是 梅花树的 样式 问题 。。
treeview怎么样使节点在expand时才动态加载方法是等你想展开的那个结点要展开时候只显示他的下一级结点,不展开的结点不进行数据绑定,这样在页面加载的时候就不要把数据库中全部数据都读出来了(尤其是当数据库很大时候这个方法很有效),绑你狂顶
你的loadtree是不是创建了4000*4=160000个String对象啊?
如果用在网页上就别费劲了,ASP.NET 有一个Response TimeOut 限制,不等你把5000传完,就会断在那里。
通常UI设计会要求加一个搜索功能,每回返回一个小的树,显示最接近20个节点,有时还可以把最后的节点变成动态节点,表示“更多..."或者将树按深度断开,例如 国家-省-公司-部门-经理-人员
可以变成左右两个树:国家-省-公司-部门 和 部门-经理-人员
用户找到节点后再用ajax 展开。
我这里有两个32层以上树型结构的递归方法的两个自定义函数.
见http://www.wsoft.net/Index/Catalog61/215.aspx这种大数据量无非是
1.用时间换空间
2.用空间换时间
这两种方法来优化把你的库三个字段都建成索引字段 .
读数据肯定会影响速度,建议用DataSet来保存,这样应该快点。
树的节点的建立就是递归建立,不会很快。我知道一个笨方法,就是做成静态链表,然后依次生成树的节点。
{
tree += "tree.N[\"" + dr.GetString(1) + "_" + dr.GetString(0) + "\"] = \"T:" + dr.GetString(2) + "; D:id=" + dr.GetString(0) + "\"\r\n";
} 这样得多少次啊?
数库设计是用LIKE还是用紧密的父子关联查询?用了缓存技术吗?