Flex DataGrid 分页
六月 15th, 2009
Leave a comment
分享一个刚弄完 Flex DataGrid 分页控件,确切点说,应该是Flex ListBase 分页控件,继承自ListBase的组件都能被控制,
至于我所说的控制,是指数据本地化之后的控制,如果你是想要实现与后台交互式的读取数据,就得自己动手了。
废话少说,先看看怎么用(下面的实例使用的都是DataGrid):
PageController 就是分页 控制器,PerPage属性设置每页显示多少条数据,TargetUI属性设置控制对象,这里设置了控制DataGrid每页显示5条数据,这两个属性一般都
是在编码期程序员就直接指定了(有特殊要求的同志,自己去改),DataProvider属性设置数据源,比较常见的是运行时赋值,比如读取XML,或者后台读取数据,可以通过下面3种方法赋值。
实现Flex DataGrid 分页的方法
1.最常用的方法,数据源被设置在了DataGrid 上面,控制器直接操控
<mx:DataGrid id="dg" dataProvider="{DGArray}" rowCount="8" width="400"/> <Pagination:PageController id="pc" TargetUI="{dg}" PerPage="5"/>
2.数据源直接交给控制器,通过控制器分配数据
<mx:DataGrid id="dg" rowCount="8" width="400"/> <Pagination:PageController id="pc" DataProvider="{DGArray}" TargetUI="{dg}" PerPage="5"/>
3.数据源在运行中赋值
<mx:DataGrid id="dg" rowCount="8" width="400"/> <Pagination:PageController id="pc" TargetUI="{dg}" PerPage="5"/> <mx:Button label="点击设置DataGrid数据" click="{dg.dataProvider=DGArray}"/> <mx:Button label="点击设置PageController数据" click="{pc.DataProvider=DGArray}"/>
因为手上的项目数据源比较杂吗,有时用XMLList,有时用ArrayCollection,还有后台.NET 传的IList,所以控制器里面的数据源采用了ICollectionView,如果你的数据源比较单一的话,可以采用
Array或者ArrayCollection,再通过slice方法,比较方便,速度上应该也会快点!见仁见智咯!写得不好的话别骂我,任改,有更好的想法或者实现上有什么问题,一定回来留个言!
Pagination.rar源码在这里 下载地址1 下载地址2
原文链接:http://flex.desizen.com/flex-datagrid-page/





thegod (2009/07/01)
Pagination.rar不能下载阿
能否检查一下?
warmC (2009/07/01)
@thegod:检查过了,奇怪的问题,
,这是另一个链接地址:Pagination_1.rar
thegod (2009/07/01)
又能下了。。
代码写的很专业,要是能把排序也加上就好了。
现在datagrid排序,只能排当页的数据
warmC (2009/07/01)
@thegod:
,你更专业。你所说的排序,我已经实现到了,关系到项目安全,我在改Demo,稍后会更新上来的!
joel (2009/07/02)
@thegod:带排序功能的出来了:Flex DataGrid 分页 带排序功能
本来是菜虫发的,可他没加”@”,我就编辑了下.
thegod (2009/07/02)
强大。居然又google到你了。代码还没细看。
我现在用的是Advanced DataGrid,比DataGrid强。
多列排序,Tree Data模式,FunctionStyle等等,很实用。
要用到我的上面,估计还要改改
joel (2009/07/02)
@thegod:哈哈,看来自己研究的SEO真的有点成效了呢.
warmC (2009/07/03)
@thegod:Advanced DataGrid,是很强大,但是如果只是显示单调的数据,而且功能要求不大的话。Advanced DataGrid这种东西是害你生成SWF变大的罪魁祸首!
warmC (2009/07/03)
@joel:其实@我有加过了,后面发现表达的有点问题,修改后怕thegod收到太多的邮件,就没再@了。没想到,你还是@了一次!
joel (2009/07/03)
@warmC:
原来似啧样啂…
thegod (2009/07/03)
学习了。ICollectionView的排序很强大。
你的sample还有一点不太好的地方,就是排序以后,原有的标示排序的黑色三角光标没有了,看不出当前是哪个字段在排序
_targetUI.addEventListener(DataGridEvent.HEADER_RELEASE,onDGHeaderRelease);
感觉上面这一句,把系统的监听覆盖了。能否让他继续发过去?
我仿造你的,做了AdvancedDataGrid的换页排序。因为以上原因,系统本来支持的多字段排序不起作用了。
自定义Head的话,DataGrid还简单点。AdvancedDataGrid有点困难。主要是不熟
thegod (2009/07/03)
AdvancedDataGrid标题显示内容:标题文字+分隔线+排序级别+升降序光标
排序操作有两种:
1,点标题的文字部分
2,点右边的升降序光标。
点标题的文字部分:
如果当前没有排序,或用了多个字段排序。则变为仅用该字段排序,asc.
如果当前仅用该字段排序,则无反应。(感觉应该更改排序方向更好一点。跟普通DataGrid的操作一致)
点右边的升降序光标:
如果当前没有排序,或用了多个字段排序。则变为仅用该字段排序,asc.
如果当前该字段已经有排序,则更改排序方向。
如果当前字段没排序,有别的字段排序。则增加为第二/第三..排序字段。asc
光标移到上面时,显示点击以后的排序状况。
光标移上去之前,没有排序的字段,排序级别和升降序光标不显示。
———–>自定义HeaderRenderer好做吗?
warmC (2009/07/04)
@thegod:哇,你很强哦!完美主义者!我没有细化出这么多东西,目前来说,排序的话还有很多问题呢,用HeaderRenderer应该可以实现,但如果列过多的话,会卡!我这边的需求都是稀奇古怪的,一个Datagrid,读取的数据是按照关键字分页的,点表头则进行普通的排序,但是有一列(排名列),无论你怎么排,都是从1开始递增。然后点击不同的表头,会因为关键字不同,读取不同的数据!不知thegod兄有没有什么好的想法?既然大家都在混ListBase排序!
warmC (2009/07/04)
目前还有添加过一个AdvancedDataGrid呢,真是out了,有空玩一玩~
joel (2009/07/04)
啊,看的有点迷糊了
thegod (2009/07/06)
@warmC:
我是初学,目前在用flex改造一个以前的产品,必须要用AdvancedDataGrid的一些特性。我做了一个AdvancedDataGrid的sample,要的话可以发给你。我的msn:xu.gb@hotmail.com,请加我。
我的想法:
点表头,按关键字分页。就是在排序里面把关键字作为第一排序字段。同时,比较关键字,和上一条记录不同时,立刻换页。排序后,排名列RowNo需要重新赋值1-n,排序时最好在list里面加一个page字段,直接把排序后的数据处在哪一页记录下来。这样换页时就不需要重新计算了。按page=nowPage过滤即可。
–以上说的是把所有数据取到前台的做法,排序时从后台重新取数据,也可以。要把nowPage,pageSize,key作为参数传过去。如果后台没有保留查询结果,那还要重新查询,这样就要把查询条件保留下来。几种做法都有优缺点。
superkof_zx (2009/08/21)
你好,楼主。那个源文件怎么下不下来啊。你能不能传到我邮箱里?谢谢
java (2011/09/27)
分页成功后,页面上的查询按钮就失效了