3.6. 树状表格,层次分明地展示表格信息

treeGrid是一个带有树结构的grid组件,可以方便的展示部门,目录等组织结构,比单纯的树展示的更加详细。效果图如下

此组件的数据结构和树比较靠近,必须具有树的层次结构,页面代码写法和Grid类似,下面展示一个简单的treeGrid示例代码,页面代码定义了一个treeGrid表格,其列的定义与传统表格一致

<w:treeGrid id="treeGrid" title="居室装修工程" width="500" height="300">
   <w:outputColumn id="task" header="任务" width="230"/>
   <w:outputColumn id="duration" header="周期" align="center"/>
   <w:outputColumn id="user" header="安排人员" width="150"/>
</w:treeGrid>

后台代码必须返回特定结构的数据去填充前台页面,才能展现成树状表格的样子。ManagedBean:

@Bind(id = "treeGrid")
    private TreeGridDataProvider dataProvider = new TreeGridDataProviderAdapter() {
        @Override
        public Object[] getChildren(Object userData) {
            if(userData ==null){
                return new Object[]{"ROOT"};
            }
            if(userData.equals("ROOT")){
                return new Project[]{new Project("装修",13.25f,"Tommy Maintz","task-folder")};
            }
            if(userData instanceof Project){
                Project p=(Project)userData;
                if(p.getTask().equals("装修")){
                    return new Project[]{
                               new Project("购买家庭用品",1.25f,"Tommy Maintz","task-folder"),
                               new Project("改装",12f,"Tommy Maintz","task-folder")
                    };
                }else if(p.getTask().equals("购买家庭用品")){
                    return new Project[]{
                               new Project("厨房用品",0.25f,"Tommy Maintz","task"),
                               new Project("食品",0.4f,"Tommy Maintz","task"),
                               new Project("清洁用品",0.4f,"Tommy Maintz","task"),
                               new Project("办公用品",0.2f,"Tommy Maintz","task")
                    };
                }else if(p.getTask().equals("改装")){
                    return new Project[]{
                               new Project("厨房地板",6.5f,"Tommy Maintz","task"),
                               new Project("粉刷卧室",2.75f,"Tommy Maintz","task"),
                               new Project("装饰起居室",2.75f,"Tommy Maintz","task"),
                               new Project("安装电灯",0.75f,"Tommy Maintz","task"),
                               new Project("接上屏风",2f,"Tommy Maintz","task")
                    };
                }else{
                    return null;
                }
            }
            return null;
        }
        @Override
        public boolean isExpanded(Object userData) {
            if(userData instanceof Project && ((Project)userData).getTask().equals("装修"))
                return true;
            else
                return false;
        }
    };

从后台取数的代码可以看出,它和tree的取数方式完全一样。

想查看更多属性和相关示例,请看《treeGrid示例》 还有《构件参考》