您的位置:首页 > 其它

根据tree绑定数据的上下级关系,实现无限制的分支等级[flex][arraycollection][tree]

2012-12-14 14:48 169 查看
从数据库调出来的数据是所有的部门的记录,但是部门间存在上下级关系,在数据库中有一个确定上下级关系的表(部门DEPARTNAME;上级编号SUPERDEPARTNUM;本部门编号DEPARTNUM),最终要在TREE中按上下级关系层级显示。
项目中需要这样一个功能实现,逻辑有点复杂,写得可能有点复杂,以后想到好的方法再改进。。。。。
实现步骤:
【start】
1.从数据库中调取部门的相关记录存入aryDeptSet
2.判断是否为最高级别的部门,如果不是,将该部门记录筛选出存入aryDeptSet2中,并将aryDeptSet中相关记录删除
3.对aryDeptSet2中的记录遍历(倒序遍历)
(1)寻找该记录相关连的上下级部门中的最底层的部门保存到temp,并在aryDeptSet2中将该部门删除
(2)在aryDeptSet2中寻找该部门的父级部门存入Arraycol,并将该部门存入Arraycol的children中构建上下级关系,
最后将该父级部门在aryDeptSet2中删除。
(3)将aryDeptSet2中其他同级节点也加到Arraycol的children中,并在aryDeptSet2中删除
(4)继续寻找Arraycol的父级部门,循环(2)、(3)步操作,直到寻找到第二等级部门,
将此时的Arraycol追加到aryDeptSet中对应的最高等级父节点的children下
【end】

var aryDeptSet :ArrayCollection = event.result.DEPT as ArrayCollection;
var aryDuty :ArrayCollection = event.result.DUTY as ArrayCollection;
var aryDeptSet2 :ArrayCollection = new ArrayCollection();
//1.先筛选出aryDeptSet二级及以后分枝
for(var i:Number=aryDeptSet.length-1; i >=0; i--)
{
var item:Object = aryDeptSet.getItemAt(i);
if (item.SUPERDEPARTNUM>=0)
{
aryDeptSet.removeItemAt(i);
aryDeptSet2.addItem(item);
}
}

//2.根据aryDeptSet2保留的子分枝重构aryDeptSet
for(var m:Number=aryDeptSet2.length-1; m >=0; m=aryDeptSet2.length-1)
{
//(1)step first://判断是否有上一级且上一级的SUPERDEPARTNUM不为-1,将其添加到tempArraycol
var myLevel:Number=0;//save判断 的级数
var Arraycol:ArrayCollection=new ArrayCollection();//save级数链中的父子关系的items
var temp:ArrayCollection=new ArrayCollection();//中转站
//检索具体某一项ITEM的上下级关系
var deepth:Number=0;
temp.addItem(aryDeptSet2.getItemAt(0));
//检索到最后一级
for(var op:Number=1;;)
{
op=1;
for(var m1:Number=m;m1>=0;m1--)
{
if(aryDeptSet2.getItemAt(m1).SUPERDEPARTNUM== temp.getItemAt(0).DEPARTNUM)
{
temp.setItemAt(aryDeptSet2.getItemAt(m1),0);
deepth++;
break;
}
if (m1==0)
op=0;
}
if(op==0)
break;
}
aryDeptSet2.removeItemAt(aryDeptSet2.getItemIndex(temp.getItemAt(0)));m--;
//(2)构造一个整分枝
for(var op2:Number=1;;)
{
op2=1;
//<1>添加父节点
for(var m3:Number=m;m3>=0;m3--)
{
if(aryDeptSet2.getItemAt(m3).DEPARTNUM== temp.getItemAt(0).SUPERDEPARTNUM)
{
Arraycol.addItem(aryDeptSet2.getItemAt(m3));
Arraycol.getItemAt(0).children=new ArrayCollection([temp.getItemAt(0)]);
aryDeptSet2.removeItemAt(m3);m--;
op2=0;deepth--;
break;
}
}
//<2>添加剩余节点同级
for(var m2:Number=m;m2>=0;m2--)
{
if(Arraycol.length==0)
break;
if(aryDeptSet2.getItemAt(m2).SUPERDEPARTNUM== temp.getItemAt(0).SUPERDEPARTNUM && aryDeptSet2.getItemAt(m2).SUPERDEPARTNUM!= temp.getItemAt(0).DEPARTNUM)
{
Arraycol.getItemAt(0).children.addItem(aryDeptSet2.getItemAt(m2));
aryDeptSet2.removeItemAt(m2);m--;
}
}
if(Arraycol.length>0)
{
temp.setItemAt(Arraycol.getItemAt(0),0);
}
Arraycol.removeAll();
if(deepth<=0)
break;
}
//(3)加入该分枝
for(var m4:Number=aryDeptSet.length-1;m4>=0;m4--)
{
if(aryDeptSet.getItemAt(m4).DEPARTNUM==temp.getItemAt(0).SUPERDEPARTNUM)
{
if(aryDeptSet.getItemAt(m4).children==null)
{
aryDeptSet.getItemAt(m4).children=new ArrayCollection([temp.getItemAt(0)]);
break;
}
else
{
aryDeptSet.getItemAt(m4).children.addItem(temp.getItemAt(0));
break;
}
}
}
//(4)清空temp
temp.removeAll();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐