Browse > Home » FLEX » Flex DataGrid 分页

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

转载请注明: 出自 FlexHome
原文链接:http://flex.desizen.com/flex-datagrid-page/

Related Posts

18 条评论 »
  1. thegod (2009/07/01) Reply to this comment

    Pagination.rar不能下载阿
    能否检查一下?

  2. warmC (2009/07/01) Reply to this comment

    @thegod:检查过了,奇怪的问题, ;-) ,这是另一个链接地址:Pagination_1.rar

  3. thegod (2009/07/01) Reply to this comment

    又能下了。。 :x

    代码写的很专业,要是能把排序也加上就好了。
    现在datagrid排序,只能排当页的数据

  4. warmC (2009/07/01) Reply to this comment

    @thegod: :roll: ,你更专业。你所说的排序,我已经实现到了,关系到项目安全,我在改Demo,稍后会更新上来的! :grin:

  5. joel (2009/07/02) Reply to this comment

    @thegod:带排序功能的出来了:Flex DataGrid 分页 带排序功能 :smile: 本来是菜虫发的,可他没加”@”,我就编辑了下.

  6. thegod (2009/07/02) Reply to this comment

    强大。居然又google到你了。代码还没细看。
    我现在用的是Advanced DataGrid,比DataGrid强。
    多列排序,Tree Data模式,FunctionStyle等等,很实用。

    要用到我的上面,估计还要改改

  7. joel (2009/07/02) Reply to this comment

    @thegod:哈哈,看来自己研究的SEO真的有点成效了呢. :lol:

  8. warmC (2009/07/03) Reply to this comment

    @thegod:Advanced DataGrid,是很强大,但是如果只是显示单调的数据,而且功能要求不大的话。Advanced DataGrid这种东西是害你生成SWF变大的罪魁祸首! :grin:

  9. warmC (2009/07/03) Reply to this comment

    @joel:其实@我有加过了,后面发现表达的有点问题,修改后怕thegod收到太多的邮件,就没再@了。没想到,你还是@了一次! :!:

  10. joel (2009/07/03) Reply to this comment

    @warmC: :sad: 原来似啧样啂…

  11. thegod (2009/07/03) Reply to this comment

    学习了。ICollectionView的排序很强大。
    你的sample还有一点不太好的地方,就是排序以后,原有的标示排序的黑色三角光标没有了,看不出当前是哪个字段在排序
    _targetUI.addEventListener(DataGridEvent.HEADER_RELEASE,onDGHeaderRelease);
    感觉上面这一句,把系统的监听覆盖了。能否让他继续发过去?

    我仿造你的,做了AdvancedDataGrid的换页排序。因为以上原因,系统本来支持的多字段排序不起作用了。

    自定义Head的话,DataGrid还简单点。AdvancedDataGrid有点困难。主要是不熟

  12. thegod (2009/07/03) Reply to this comment

    AdvancedDataGrid标题显示内容:标题文字+分隔线+排序级别+升降序光标

    排序操作有两种:
    1,点标题的文字部分
    2,点右边的升降序光标。

    点标题的文字部分:
    如果当前没有排序,或用了多个字段排序。则变为仅用该字段排序,asc.
    如果当前仅用该字段排序,则无反应。(感觉应该更改排序方向更好一点。跟普通DataGrid的操作一致)

    点右边的升降序光标:
    如果当前没有排序,或用了多个字段排序。则变为仅用该字段排序,asc.
    如果当前该字段已经有排序,则更改排序方向。
    如果当前字段没排序,有别的字段排序。则增加为第二/第三..排序字段。asc

    光标移到上面时,显示点击以后的排序状况。
    光标移上去之前,没有排序的字段,排序级别和升降序光标不显示。

    ———–>自定义HeaderRenderer好做吗?

  13. warmC (2009/07/04) Reply to this comment

    @thegod:哇,你很强哦!完美主义者!我没有细化出这么多东西,目前来说,排序的话还有很多问题呢,用HeaderRenderer应该可以实现,但如果列过多的话,会卡!我这边的需求都是稀奇古怪的,一个Datagrid,读取的数据是按照关键字分页的,点表头则进行普通的排序,但是有一列(排名列),无论你怎么排,都是从1开始递增。然后点击不同的表头,会因为关键字不同,读取不同的数据!不知thegod兄有没有什么好的想法?既然大家都在混ListBase排序! :grin:

  14. warmC (2009/07/04) Reply to this comment

    目前还有添加过一个AdvancedDataGrid呢,真是out了,有空玩一玩~ :mrgreen:

  15. joel (2009/07/04) Reply to this comment

    啊,看的有点迷糊了 :|

  16. thegod (2009/07/06) Reply to this comment

    @warmC:
    我是初学,目前在用flex改造一个以前的产品,必须要用AdvancedDataGrid的一些特性。我做了一个AdvancedDataGrid的sample,要的话可以发给你。我的msn:xu.gb@hotmail.com,请加我。

    我的想法:
    点表头,按关键字分页。就是在排序里面把关键字作为第一排序字段。同时,比较关键字,和上一条记录不同时,立刻换页。排序后,排名列RowNo需要重新赋值1-n,排序时最好在list里面加一个page字段,直接把排序后的数据处在哪一页记录下来。这样换页时就不需要重新计算了。按page=nowPage过滤即可。

    –以上说的是把所有数据取到前台的做法,排序时从后台重新取数据,也可以。要把nowPage,pageSize,key作为参数传过去。如果后台没有保留查询结果,那还要重新查询,这样就要把查询条件保留下来。几种做法都有优缺点。

  17. superkof_zx (2009/08/21) Reply to this comment

    你好,楼主。那个源文件怎么下不下来啊。你能不能传到我邮箱里?谢谢

  18. java (2011/09/27) Reply to this comment

    分页成功后,页面上的查询按钮就失效了

Leave a Reply

emoticons