Flex有2种常用的datagrid:datagrid和advanceddatagrid,本文指功能更加强大的advanceddatagrid。所谓advanceddatagrid的动态应用是指,其列数不确定,随着数据源的改变,其列自适应填充(列顺序、列抬头设置、宽度设置等)。
为什么要讨论datagrid的动态应用,是因为实际业务当中往往有很多报表其列数是不确定的,这通常是指横向报表。如有张报表是这样的:
年份 月份 产品类别 销售额
2010 6 笔记本 10000(万元)
2010 6 台式机 20000(万元)
……
现在要把这张报表横过来,展示如下:
年份 月份 产品类别1 产品类别2 产品类别3…
2010 6 10000(万元)20000(万元) …
此时,其列是随着产品类别数量变动而变动的,即其列是需要动态改变的,虽Flex提供了现成的olapdatagrid可用,由于其使用不方便、展示慢等原因,简单的动态列报表还是用advanceddatagrid来实现,那么如何实现?
1、 约定
1) flex使用blazeds与java进行通讯;
2)
2、 在java定义一个flex的datagrid列属性设置类
JavaColDef,该类有name、text、width等属性,分别表示名称、抬头和宽度;当然为了映射,最好flex端定义一个与JavaColDef结构一样的FlexColDef,并映射到JavaColDef。
3、 在java端定义一个获取列属性设置的函数
Public JavaColDef[] getDataGridSetting()
该函数返回列属性数组,在数组中的填充顺序即默认为该列在grid中的显示顺序。
4、 在flex端进行datagrid的数据填充处理
假设flex执行了查询操作得到了数据集{dataset},当我们得到该数据集的时候,我们立即调用getDataGridSetting方法去获取列属性定义。
获取到列属性定义之后,执行表格重建操作。
1) 先移除所有列;
2) 根据属性列集合,依次给datagrid添加列,并设置其属性;
3) 绑定数据集{dataset}
5、 总结
Datagrid动态列实现,只要进行2个操作即可。
1) 开发人员自行实现getDataGridSetting()函数;
2) 数据查询事件处理,查询成功后调用统一函数,void rebuildGrid(array:ArrayCollection)即可。
为什么要讨论datagrid的动态应用,是因为实际业务当中往往有很多报表其列数是不确定的,这通常是指横向报表。如有张报表是这样的:
年份 月份 产品类别 销售额
2010 6 笔记本 10000(万元)
2010 6 台式机 20000(万元)
……
现在要把这张报表横过来,展示如下:
年份 月份 产品类别1 产品类别2 产品类别3…
2010 6 10000(万元)20000(万元) …
此时,其列是随着产品类别数量变动而变动的,即其列是需要动态改变的,虽Flex提供了现成的olapdatagrid可用,由于其使用不方便、展示慢等原因,简单的动态列报表还是用advanceddatagrid来实现,那么如何实现?
1、 约定
1) flex使用blazeds与java进行通讯;
2)
2、 在java定义一个flex的datagrid列属性设置类
JavaColDef,该类有name、text、width等属性,分别表示名称、抬头和宽度;当然为了映射,最好flex端定义一个与JavaColDef结构一样的FlexColDef,并映射到JavaColDef。
3、 在java端定义一个获取列属性设置的函数
Public JavaColDef[] getDataGridSetting()
该函数返回列属性数组,在数组中的填充顺序即默认为该列在grid中的显示顺序。
4、 在flex端进行datagrid的数据填充处理
假设flex执行了查询操作得到了数据集{dataset},当我们得到该数据集的时候,我们立即调用getDataGridSetting方法去获取列属性定义。
获取到列属性定义之后,执行表格重建操作。
1) 先移除所有列;
2) 根据属性列集合,依次给datagrid添加列,并设置其属性;
3) 绑定数据集{dataset}
5、 总结
Datagrid动态列实现,只要进行2个操作即可。
1) 开发人员自行实现getDataGridSetting()函数;
2) 数据查询事件处理,查询成功后调用统一函数,void rebuildGrid(array:ArrayCollection)即可。