现在,有一个文章栏目显示的问题困扰着我。因为技术不精。憋了一天没憋出来结果。
现在有一张表,如图所示,有id和上级id。可以无限极设置。现在我将它们取出来放在一个LIST里面。是无序的。我想实现的是能够将它们分级显示在下拉框中。
效果如这样的。顶级目录一
目录1
目录1
目录2
目录2
目录3
顶级目录二
目录1谢谢大家的帮助!!!
现在有一张表,如图所示,有id和上级id。可以无限极设置。现在我将它们取出来放在一个LIST里面。是无序的。我想实现的是能够将它们分级显示在下拉框中。
效果如这样的。顶级目录一
目录1
目录1
目录2
目录2
目录3
顶级目录二
目录1谢谢大家的帮助!!!
解决方案 »
- org.hibernate.exception.ConstraintViolationException: Could not execute JDBC bat
- 寻找Java开源论坛~~~~
- TelnetOutputStream做FTP上传的问题
- Struts2向标签传${express}值的问题
- 关于Hibernate问题...
- hibernate中一对多双向关联时如何更新子对象的内容?
- 请大家说说分页技术的性能问题!
- JAVA数组问题
- jsp不能编译(tomcat) 急。。。。在线等
- 如何验证CVS连接字符串合法
- 启动tomat后报错
- 在程序里怎么给交叉报表(JasperReport)传递参数?
没个数字代表的是什么意思.
一般的做法,从你的LIST中取出代表分级的属性列
遍历属性列的每一项,对字符串进行判断.如第一个是1则把他放到什么位置.如果后面还有数字又把它放到什么位置
第一,如果你的数据库支持递归层级排序,那么你可以在数据库中做到这一点。
第二,如果你的数据库不支持递归层级排序,你可以在你的服务器端代码(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参考一下上边的思路。
主要是 查数据的问题吧
select * from (select * from table1,TABLE2 where 父id = ) T where T.子id=? 下一级的再嵌套一个select ;查出List就好办了如果用Ajax的话页面传数据返回List;再用JS控制把
1-1-1是顶级目录一下面的子目录的子目录一
1-1-2是顶级目录一下面的子目录的子目录二我用的是MYSQL数据库。问过其他朋友,都说使用递归比较方便。但这个递归循环总是写不出头绪来。所以特来求助
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>