用的微软的TreeView ,由于节点太多,要求分两次载入数据生成节点。
(1)先载入三层的节点,这个用递归实现了。 
(2)现在要在现有的三层的最后一层上面,点击任意一个节点,就展开该节点下面的所有节点。
(3)要求:载入树后需要频繁的点击,所以AutoPostBack必须为false

解决方案 »

  1.   

    多谢: zhangqiushui
    TO:skytear(),这样老板不同意的,在点击的节点上展开,不能到页面的另外的地方去点展开?
      

  2.   

    根据你的要求,不刷新,只能用xmlhttp方式实现.
    要根据节点判断此节点的下级子节点,你应该先在数据库中实现父子关系.
    比如一个记录的ID是1,那么,它的下级节点的父ID应是1,这样你传递1去数据库中求取时,就可以取到所有父ID为1的记录了.如下:
    ID 第一节点 父节点ID
    1   aa      
    2   bb      1
    3   cc      1
    4   dd      2
    5   ee      2
    6   gg      3
      

  3.   

    TO hchxxzx(NET?摸到一点门槛):
    是的,在数据库里面实现了父子关系,如果用递归一次行全部载入节点没问题的。
    问题关键还是在这里:根据你的要求,不刷新,只能用xmlhttp方式实现.能不能给了连接,Demo什么的我去看看,这个东西我不会。
      

  4.   

    另外:(要求:载入树后需要频繁的点击,所以AutoPostBack必须为false)
    再说明一下这里,TreeView的AutoPostBack是false,但是点击节点载入子节点是在数据库里面去取节点的数据的,所以这里肯定要刷新一下的。老板可以接受的。
      

  5.   

    具体的语法可能有些错误,主要看思想!
    Public Shared Function Expandnodes(ByVal mnode As node)
        If mnode.children>0 Then
            mnode.expande=true
            Dim nnode As integer=mnode.firstbling
            For i = nnode To mnode.lastbling
                set mnode = mnode.child(i)
                expandenodes(mnode)
            Next
        End If
    End Function
      

  6.   

    Public Shared Function Expandnodes(ByVal mnode As node)
        If mnode.children>0 Then
            mnode.expande=true
            Dim nnode As integer=mnode.child.firstbling
            For i = nnode To mnode.child.lastbling
                set mnode = mnode.child(i)
                expandenodes(mnode)
            Next
        End If
    End Function
      

  7.   

    给你一个xmlhttp脚本函数吧,你可以自己进行改装,简单一点的使用方法,在被读取的页面里面用response.write方法直接写出你树页面的表格结果,形成新的树//以XML求取数据
    //webFileUrl:要读取的页面地址,可带参数
    function XmlPost(webFileUrl)
    {
    var result = "";
    var xmlHttp = new ActiveXObject("MSXML2.XMLHTTP");
    xmlHttp.open("POST", webFileUrl, false);
    xmlHttp.send("");
    result = xmlHttp.responseText;
    return(result);
    }
      

  8.   

    还是没有头绪啊。用google搜了一下MSXML2.XMLHTTP,资料倒是有一堆,但针对我的问题,不知道如何实现,哪位高手再介绍一下步骤,思路或者原理啊。急盼!
      

  9.   

    你点击某个节点的时候,应该可以取到该节点的ID吧
    取到ID后,把它传递给上述的xmlhttp,现在是个参数(指向页面参数),改为传递ID(求取的页面一般是固定的)
    比如
    function xmlhttp(sid)
    {
    var webformurl = "xxx.aspx?id=" + sid;
    //开始读取上述页面的值
    .....
    }然后在该页面xxx.aspx页面取到值后,你可以运用xml或是直接response.write写出来,这样,在当前页面的脚本里面就求取到值了.你即可通过脚本方式写到你的树里面去
      

  10.   

    TO:hchxxzx(NET?摸到一点门槛)点击某个节点的时候,确实可以得到ID啊。你说把ID作为参数传递,求取的页面一般是固定的,求取的页面是固定的?这个我没理解得了。function xmlhttp(sid)
    {
    var webformurl = "xxx.aspx?id=" + sid;
    //开始读取上述页面的值
    .....
    }
    另外,通过脚步方式写树也没搞清楚。
      

  11.   

    用的微软的TreeView 
    ----------------
    微软的TreeView 我没有用过,我都自己写.
    上面的XMLHTTP方式取值,假设是到xxx.aspx页面取值,传递的是xxx.aspx?id=4在xxx.aspx页面我这样操作
    string id = this.request.querystring("id");
    string sql= "select id,name from table where 父ID= " + id;
    用此SQL求取到数据集,再循环它创建树
    DataTable myTab = 根据SQL取到数据集;
    strig mystr = "";
    for(int i=0;i<myTab.Rows.Count;i++)
    {
    //在此循环中,逐一取出数据集中的数据,根据树的格式用HTML语言生成表格或你树的表现形式
    //最后就是输出一段HTML语法
    mystr += "...";
    }//然后输出
    this.response.write(mystr);
    this.response.end();这样,在脚本取值的地方,就取到了上面输出的语句了.
    没有用过微软的TreeView ,不知道它有没有提供一个空的行来容纳获取到的HTML语句.我在自己写的树里面,是在每一个节点之下都生成一个空行(高度为0)
    然后用脚本:
    document.all("空行单元格ID").innerHTML = 取到的值;
    这样,树就出来了.不过我觉得我提供的方法也许不一定适合你.你自己试试看.