一个树有 3000-5000 个节点左右,树有2个地方要用,一个是 对树的 添加,修改,删除,另外一个地方是设置权限,对树添加了 checkbox,目前使用是 MZtreeview , 但是发现 2000 个节点的时候马马虎虎,多了就 不能用了..大家有什么好解决方案:数据都是从数据库 读取出来的(有点慢) 数据库结构id(节点) ,fatherid(父节点)  ,text(文本)

解决方案 »

  1.   

    不知道,数据量大是因为树的节点层次深,还是同级节点本身就多,从策略上考虑,将所有节点加载进来,无论是否使用了 AJAX 即时记载方式,
    个人认为,都是不合理的这么多节点肯定有一个先过滤的过程,试想用户要找第10级的某个节点,他需要点多少次,即时AJAX又要等多久,才能到达目的地?展开10级之后,占据多大的空间?如何布局?眼花缭乱!
    当然搜索过滤之后,可能导致某些非叶节点未包含进来,那么一颗完整的树,如何建立?这也是一个需要思考的问题
      

  2.   

    4000  个节点 加载的时候 ,就慢了,慢有2个原因,1个原因是 读取 数据库的时候,
      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;
        }第二个 原因 就是 梅花树的 样式 问题 。。
      

  3.   

    =如果点击 哪个 加载 哪个,做 权限的时候,选择 checkbox ,将记录 存储起来,大家有没有 比较成熟的方案  ?很少在 CSDN 上提问,实在是在 谷歌上不好搜了。
      

  4.   

     CSDN 上提问,实在是在 谷歌上不好搜了
      

  5.   

    我也发了关于这类帖子
    treeview怎么样使节点在expand时才动态加载方法是等你想展开的那个结点要展开时候只显示他的下一级结点,不展开的结点不进行数据绑定,这样在页面加载的时候就不要把数据库中全部数据都读出来了(尤其是当数据库很大时候这个方法很有效),绑你狂顶
      

  6.   

    AJAX 即时加载吧不过,无论我都会想办法过滤一些当前用户不关心的节点的噢噢,让一个用户维护一个具有 5K+ 节点的树,他不疯掉才怪不是权限吗? 没有进行权限分组吗?
      

  7.   

    手工写树吧,直接绑进treeview不太现实.开始只给根节点,然后根据他点击的节点再去和数据库交互,虽然交互多了点,但是应该比一次绑定要好很多.
      

  8.   

    还有,根据父节点分视图,这样select直接从不同的视图里取,速度又快一点
      

  9.   

    算法优化。
    你的loadtree是不是创建了4000*4=160000个String对象啊?
      

  10.   


    如果用在网页上就别费劲了,ASP.NET 有一个Response TimeOut 限制,不等你把5000传完,就会断在那里。
    通常UI设计会要求加一个搜索功能,每回返回一个小的树,显示最接近20个节点,有时还可以把最后的节点变成动态节点,表示“更多..."或者将树按深度断开,例如 国家-省-公司-部门-经理-人员
    可以变成左右两个树:国家-省-公司-部门 和 部门-经理-人员
      

  11.   

    你的问题是同级节点多 ,可以考虑顶级节点分页。如初始时第一页加载200行。
    用户找到节点后再用ajax 展开。
      

  12.   

    用存储过程
    我这里有两个32层以上树型结构的递归方法的两个自定义函数.
    见http://www.wsoft.net/Index/Catalog61/215.aspx这种大数据量无非是
    1.用时间换空间
    2.用空间换时间
    这两种方法来优化把你的库三个字段都建成索引字段 .
      

  13.   

    我没做过这么多的节点。
    读数据肯定会影响速度,建议用DataSet来保存,这样应该快点。
    树的节点的建立就是递归建立,不会很快。我知道一个笨方法,就是做成静态链表,然后依次生成树的节点。
      

  14.   

    while (dr.Read()) 
                { 
                    tree += "tree.N[\"" + dr.GetString(1) + "_" + dr.GetString(0) + "\"] = \"T:" + dr.GetString(2) + "; D:id=" + dr.GetString(0) + "\"\r\n"; 
                } 这样得多少次啊?
    数库设计是用LIKE还是用紧密的父子关联查询?用了缓存技术吗?