Flex DataGrid通用分页组件

在进行flex编程时,经常会用到在dataGrid中分布显示数据,但是在每个页面中都写一遍查询,显示,控制翻页的代码,既烦琐,又不美观,于是我就写一个比较通用的查询组件。

代码CommonQueryComponent.as:

package cn.zlj.component
{
 import mx.collections.ArrayCollection;
 import mx.controls.DataGrid;
 import mx.rpc.events.ResultEvent;
 import mx.rpc.remoting.mxml.Operation;
 import mx.rpc.remoting.mxml.RemoteObject;

 import cn.zlj.event.MyEvent;

 /**
  * 通用翻页组件
  */
 public class CommonQueryComponent
 {
  private var _remoteObject:RemoteObject; //远程对象
  private var _queryCondition:Object; //查询条件

  private var _pager:FlexPager; //分页控件
  private var _dg:DataGrid; //数据显示控件

  private var queryCountMethod:Operation; //查询记录数的方法
  private var queryListMethod:Operation; //查询列表的方法

  //查询记录数的方法名
  public function set queryCountOperation(queryCountMethodName:String):void
  {
   queryCountMethod=Operation(_remoteObject.getOperation(queryCountMethodName));
   queryCountMethod.addEventListener(ResultEvent.RESULT, countResultHandler);
  }

  //查询列表的方法名
  public function set queryListOperation(queryListOperationName:String):void
  {
   queryListMethod=Operation(_remoteObject.getOperation(queryListOperationName));
   queryListMethod.addEventListener(ResultEvent.RESULT, listResultHandler);
  }

  //list容器
  public function set dataContainer(dg:DataGrid):void
  {
   _dg=dg;
   //BindingUtils.bindProperty() //动态绑定
  }

  //list容器
  public function set flexPager(pager:FlexPager):void
  {
   _pager=pager;
   _pager.addEventListener(MyEvent.PAGE_CHANGED, pageChangedHandler);
  }

  //构造函数
  public function CommonQueryComponent(remoteObject:RemoteObject)
  {
   //调用后台java的对象
   _remoteObject=remoteObject

  }

  //处理查询记录数返回的结果
  private function countResultHandler(event:ResultEvent):void
  {
   var count:int=int(event.result);
   _pager.recordCount=count;
   if (count > 0)
   {
    //查询member数据
    queryList(_pager.pageSize, 0);
   }
   else
   {
    var dgProvider:ArrayCollection=ArrayCollection(_dg.dataProvider);
    //清空数据
    if (dgProvider != null)
    {
     (_dg.dataProvider as ArrayCollection).removeAll();
    }
   }
  }

  //处理查询记录列表返回的结果
  private function listResultHandler(event:ResultEvent):void
  {
   _pager.enabled=true;
   _dg.dataProvider=ArrayCollection(event.result);
  }

  //查询
  public function query(queryCondition:Object):void
  {
   if (queryCondition == null)
   {
    return;
   }
   _pager.enabled=false;
   _queryCondition=queryCondition;
   queryCountMethod.send(_queryCondition);
  }

  //查询列表
  public function queryList(pageSize:int, rowFrom:int):void
  {
   //翻页skipRows
   _queryCondition.skipRows=rowFrom;
   //一页最大记录数
   _queryCondition.rowRecords=pageSize;

   _pager.enabled=false;
   queryListMethod.send(_queryCondition);
  }

  //翻页处理
  private function pageChangedHandler(event:MyEvent):void
  {
   if(_queryCondition == null) {
    return;
   }
   var skipRows:int=event.eventData.rowFrom
   var pageSize:int=event.eventData.pageSize
   queryList(pageSize, skipRows);
  }

 }
}

 

Java代码:

//查询组件
private var queryer:CommonQueryComponent;

//module的creationComplete事件
private function init():void
{
 //查询组件
        //queryLogic:RemoteObject,用来调用后台查询
 queryer=new CommonQueryComponent(queryLogic);
        //显示数据的dataGrid
 queryer.dataContainer=dg1;
        //页面组件
 queryer.flexPager=pager;
        //后台java类中查询总计录数的方法的名字
 queryer.queryCountOperation="queryConut";
        //后台java类中查询一页数据的方法的名字
 queryer.queryListOperation="queryList";

}

//根据条件查询
private function query():void
{
       //得到查询条件
 condition=getQueryCondition();
       //查询
 queryer.query(condition);
}

 

补充:

这个组件中的查询条件必须是个类,而且还必须有skipRows(分页中的第n条记录)和pageSize(一页的记录数),

可能对有些应用来说有些限制。

 

可以通过修改

Actionscript代码
  1. queryCountMethod.send(_queryCondition);  
Actionscript代码
  1. queryListMethod.send(_queryCondition);  

这两句来实现具体的要求。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值