Flex DataGrid通用查询组件

本组件需要"Flex翻页控件 ",我的另一篇文章有这个组件的详细代码 http://lj-zhu.iteye.com/admin/blogs/720582 .

 

在进行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);
		}

	}
}
 

使用方法也是很简单的:

//查询组件
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);
}

 一切OK。

 

补充:

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

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

可以通过修改

queryCountMethod.send(_queryCondition);
queryListMethod.send(_queryCondition);

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

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值