flex中什么控件能够实现多层树型结构

时间:2023-02-03 11:56:46
flex中什么控件能够实现多层树型结构,比如:
系统名
    分类一
       小分类1
          a,......
    分类二
       小分类1
       小分类2
          a,......
    分类三

我用的AdvancedDataGrid,只能实现两层分类,能不能实现多层的分类,有人用过吗?就是这样,只能实现两层<mx:Grouping >
                     <mx:GroupingField name="parentId"/>
                     <mx:GroupingField name="id"/>
                 </mx:Grouping>
效果是这样的:
系统名
    分类一
    分类二
    分类三
分类一
       小分类1
分类二
       小分类1
       小分类2
分类三
小分类1
          a,......

我的问题:用AdvancedDataGrid能不能实现多层树型结构,怎样实现?有没有什么可行方法?
    另外,如果是用“左边一个Tree,右边一个grid”这种组合的方式就不用说了,这种方式,我也想到了,只是不想用它。

望有这方面的经验的人,指点一下。谢谢。

9 个解决方案

#1


http://flexlib.googlecode.com/svn/trunk/examples/TreeGrid/TreeGrid_Sample.swf

#2


引用 1 楼 gundamff 的回复:
http://flexlib.googlecode.com/svn/trunk/examples/TreeGrid/TreeGrid_Sample.swf


看过了,效果不错,这是什么组件呀,看着好像是grid之类的组件?是官方的还是自己写的,<mx:Grouping > 
</mx:Grouping> 
是怎么写的?能否把源码中比较关键的地主给透露一下?偶以前的号,结帖率100%呢,你放心,偶只要关键的代码就行了。

#3


又研究了一下,找到它的部分源码,它是这样的:
<flexlib:columns>
<flexlib:TreeGridColumn dataField="name"/>
<mx:DataGridColumn dataField="desc"/>
</flexlib:columns>
不过,它的那个组件<flexlib:TreeGrid,我没有找到在哪下载,看来仅使用官方的组件是不能实现了,需要自己 写组件了,

#4


http://code.google.com/p/flexlib/wiki/ComponentList
这个是开源的

#5


用TREE控件很简单

#6


引用 4 楼 gundamff 的回复:
http://code.google.com/p/flexlib/wiki/ComponentList
这个是开源的


找到swc文件了,现在就剩下写MySQL的递归查询了,3Q。

#7


非常郁闷,用这个控件,基本的功能都实现了,但是它都没有定义事件。我现在有个需求,当添加一条新数据时,我从表中再重新读一次,读完再把这个treeGrid按照以前打开的还是打开,关闲的还是关闭。我在刷新前先保存它的openItems列表,这一步没有问题,然后再遍历一下,如果在这里面的就再次打开。问题就在这个打开函数里呢,我查了一下文档,TreeGrid只有一个openItemAt(rowNum:Number, item:Object = null):void方法,可是我怎么知道它的rowNum?也看它的源码了,没找到可行方法,不知各位用的是时候用到这个东西了吗?

   顺便说一下,flex的东西真的好多不成熟,一些开源的东西,如果时间比较紧迫,文档又不全,轻易不要用,不仅自己用着郁闷,别人维护时也浪费时间。

#8


后来问了一下以前的同事,直接advancedDataGrid就能搞定了,有一个treeCulumn属性。看api看不少了,浪费了不少时间。

#9


今天在网上查rowNum找到了这个帖子:
后来自己尝试后终于成功实现了treegrid的打开,rowNum从零开始,每打开一个就加上openItemAt的返回值即可实现遍历打开。
var rowNum:int=0;
for(var j:int=0;j<dp.length;j++){
if(isOpenArray[j]==true&&dp.getItemAt(j).children!=null){
rowNum = rowNum + treeGrid.openItemAt(rowNum);
} rowNum=rowNum+1;
treeGrid.invalidateList();
}

#1


http://flexlib.googlecode.com/svn/trunk/examples/TreeGrid/TreeGrid_Sample.swf

#2


引用 1 楼 gundamff 的回复:
http://flexlib.googlecode.com/svn/trunk/examples/TreeGrid/TreeGrid_Sample.swf


看过了,效果不错,这是什么组件呀,看着好像是grid之类的组件?是官方的还是自己写的,<mx:Grouping > 
</mx:Grouping> 
是怎么写的?能否把源码中比较关键的地主给透露一下?偶以前的号,结帖率100%呢,你放心,偶只要关键的代码就行了。

#3


又研究了一下,找到它的部分源码,它是这样的:
<flexlib:columns>
<flexlib:TreeGridColumn dataField="name"/>
<mx:DataGridColumn dataField="desc"/>
</flexlib:columns>
不过,它的那个组件<flexlib:TreeGrid,我没有找到在哪下载,看来仅使用官方的组件是不能实现了,需要自己 写组件了,

#4


http://code.google.com/p/flexlib/wiki/ComponentList
这个是开源的

#5


用TREE控件很简单

#6


引用 4 楼 gundamff 的回复:
http://code.google.com/p/flexlib/wiki/ComponentList
这个是开源的


找到swc文件了,现在就剩下写MySQL的递归查询了,3Q。

#7


非常郁闷,用这个控件,基本的功能都实现了,但是它都没有定义事件。我现在有个需求,当添加一条新数据时,我从表中再重新读一次,读完再把这个treeGrid按照以前打开的还是打开,关闲的还是关闭。我在刷新前先保存它的openItems列表,这一步没有问题,然后再遍历一下,如果在这里面的就再次打开。问题就在这个打开函数里呢,我查了一下文档,TreeGrid只有一个openItemAt(rowNum:Number, item:Object = null):void方法,可是我怎么知道它的rowNum?也看它的源码了,没找到可行方法,不知各位用的是时候用到这个东西了吗?

   顺便说一下,flex的东西真的好多不成熟,一些开源的东西,如果时间比较紧迫,文档又不全,轻易不要用,不仅自己用着郁闷,别人维护时也浪费时间。

#8


后来问了一下以前的同事,直接advancedDataGrid就能搞定了,有一个treeCulumn属性。看api看不少了,浪费了不少时间。

#9


今天在网上查rowNum找到了这个帖子:
后来自己尝试后终于成功实现了treegrid的打开,rowNum从零开始,每打开一个就加上openItemAt的返回值即可实现遍历打开。
var rowNum:int=0;
for(var j:int=0;j<dp.length;j++){
if(isOpenArray[j]==true&&dp.getItemAt(j).children!=null){
rowNum = rowNum + treeGrid.openItemAt(rowNum);
} rowNum=rowNum+1;
treeGrid.invalidateList();
}