现在,有一个文章栏目显示的问题困扰着我。因为技术不精。憋了一天没憋出来结果。
现在有一张表,如图所示,有id和上级id。可以无限极设置。现在我将它们取出来放在一个LIST里面。是无序的。我想实现的是能够将它们分级显示在下拉框中。
效果如这样的。顶级目录一
  目录1
    目录1
    目录2
  目录2
  目录3
顶级目录二
   目录1谢谢大家的帮助!!!

解决方案 »

  1.   

    不清楚你的1-1-1-2
    没个数字代表的是什么意思.
    一般的做法,从你的LIST中取出代表分级的属性列
    遍历属性列的每一项,对字符串进行判断.如第一个是1则把他放到什么位置.如果后面还有数字又把它放到什么位置
      

  2.   

    这个的实现方法是多种的。
    第一,如果你的数据库支持递归层级排序,那么你可以在数据库中做到这一点。
    第二,如果你的数据库不支持递归层级排序,你可以在你的服务器端代码(java或c#)中做到这一点,不过要自己写算法实现递归层次排序。下面给出你第一种方法的数据库实现,如果你用的是oracle数据库完全可以在实现第一种方法。SELECT DISTINCT DECODE(tt.budget_item_code, null, 'leaf', 'folder') flag,
                          t.*
            FROM (SELECT rownum row_num,
                         d.*
                    FROM table_name d
                   START WITH d.itemId = 0 --0是根结点,lz可以根据自己的数据改变这个根节点的value
                  CONNECT BY d.parentId = PRIOR d.itemId
                   ORDER siblings BY d.parentId
                  ) t,
                 (SELECT *
                    FROM table_name d
                   WHERE itemId = parentId) tt
           WHERE t.itemId = tt.parentId(+)
           ORDER BY t.row_num;lz参考一下上边的思路。
      

  3.   

    有点类似一般项目的left菜单项
    主要是 查数据的问题吧
    select * from (select * from table1,TABLE2 where 父id = ) T where T.子id=?  下一级的再嵌套一个select ;查出List就好办了如果用Ajax的话页面传数据返回List;再用JS控制把
      

  4.   

    1-1是顶级目录一下面的子目录一
    1-1-1是顶级目录一下面的子目录的子目录一
    1-1-2是顶级目录一下面的子目录的子目录二我用的是MYSQL数据库。问过其他朋友,都说使用递归比较方便。但这个递归循环总是写不出头绪来。所以特来求助
      

  5.   

    在LIST里放List可以逻辑上表示多级目录啊
      

  6.   

    解决了。同时也感谢大家的支持与参与!!回答者均有分。下面将答案公布,以供大家参考(其实也都是搜集来的)。I,递归遍历List集合进行排序public void forList(List<SItem> itemlist, int parentId) {
    for (SItem item : itemlist) {
    if ((parentId == 0 && item.getPaterid() == 0)
    || (parentId != 0 && parentId == item.getPaterid())) {
    chitem.add(item);//排序后的对象再次添加至集合
    toList(itemlist, item.getItemid());
    }
    }
    }
    II,在SELECT中添加树菜单(下拉树)<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <title>下拉框中显示的多级树形菜单</title>
    <meta http-equiv="content-type" content="text/html;charset=gb2312">
    <!--把下面代码加到<head>与</head>之间-->
    <script type="text/javascript"> 
    var data =new Array(); 
    data[0]= {id:'0',pid:'1',text:'河北'}; 
    data[1]= {id:'1',pid:'-1',text:'中国'}; 
    data[2]= {id:'2',pid:'6',text:'美国}; 
    data[3]= {id:'3',pid:'0',text:'邯郸'}; 
    data[4]= {id:'4',pid:'0',text:'石家庄'}; 
    data[5]= {id:'5',pid:'3',text:'邯郸县'}; 
    data[6]= {id:'6',pid:'-1',text:'洛杉矶}; 
    function TreeSelector(item,data,rootId){ 
    this._data = data; 
    this._item = item; 
    this._rootId = rootId; 

    TreeSelector.prototype.createTree = function(){ 
    var len =this._data.length; 
    for( var i= 0;i<len;i++){ 
    if ( this._data[i].pid == this._rootId){ 
    this._item.options.add(new Option(".."+this._data[i].text,this._data[i].id)); 
    for(var j=0;j<len;j++){ 
    this.createSubOption(len,this._data[i],this._data[j]); 




    TreeSelector.prototype.createSubOption = function(len,current,next){ 
    var blank = ".."; 
    if ( next.pid == current.id){ 
    intLevel =0; 
    var intlvl =this.getLevel(this._data,this._rootId,current); 
    for(a=0;a<intlvl;a++) 
    blank += ".."; 
    blank += "├-"; 
    this._item.options.add(new Option(blank + next.text,next.id)); 
    for(var j=0;j<len;j++){ 
    this.createSubOption(len,next,this._data[j]); 



    TreeSelector.prototype.getLevel = function(datasources,topId,currentitem){ 
    var pid =currentitem.pid; 
    if( pid !=topId) 

    for(var i =0 ;i<datasources.length;i++) 

    if( datasources[i].id == pid) 

    intLevel ++; 
    this.getLevel(datasources,topId,datasources[i]); 



    return intLevel; 

    </script> 
    </head>
    <body>
    <!--把下面代码加到<body>与</body>之间-->
    <select id="myselect"></select> 
    <script language=javascript type="text/javascript"> 
    var ts = new TreeSelector(document.getElementById("myselect"),data,-1); 
    ts.createTree(); 
    </script> 
    </body>
    </html>