flex4 分页 原创

代码贴上来:

<view:PageController id="pageCtt" width="100%" height="25" targetUI="{this}"/

 

<view:DtableGrid id="dtableGrid" width="100%" height="100%" horizontalScrollPolicy="auto" columnHeaderList="{columnHeaderList}" dataProvider="{dataProvider}" itemClick="dataClick(event)" doubleClickEnabled="true" doubleClick="dataDoubleClick(event)" >
		
	</view:DtableGrid>

 

PageController 是自定义的一个分页控件:

 

<?xml version="1.0" encoding="utf-8"?>
<s:HGroup xmlns:fx="http://ns.adobe.com/mxml/2009" 
		 xmlns:s="library://ns.adobe.com/flex/spark" 
		 xmlns:mx="library://ns.adobe.com/flex/mx" verticalAlign="middle" paddingLeft="6" paddingRight="20" >
	<fx:Declarations>
		<!-- 将非可视元素(例如服务、值对象)放在此处 -->
	</fx:Declarations>
	<fx:Script>
		<![CDATA[
			import com.adobe.utils.IntUtil;
			import com.adobe.utils.StringUtil;
			import com.thams.common.constant.Glob;
			import com.thams.grid.skin.EditButtonICO;
			import com.thams.grid.skin.NoeditButtonICO;
			import com.thams.grid.vo.DataLoaderClass;
			
			import mx.collections.ArrayCollection;
			import mx.controls.Alert;
			import mx.controls.DataGrid;
			import mx.events.FlexEvent;
			import mx.events.ItemClickEvent;
			import mx.events.ListEvent;
			import mx.events.MenuEvent;
			
			import spark.components.ToggleButton;
			import spark.events.IndexChangeEvent;
			
			//保存散 / 卷内 的 pid值
			private var oldPid:int = -1;
			[Bindable]
			/**
			 * 选择条目数 . 下拉
			 */
			protected var showCounts:ArrayCollection = new ArrayCollection(
				[{label:"50", data:50}, 
					{label:"100", data:100}, 
					{label:"500", data:500}, 
					{label:"1000", data:1000}, 
					{label:"全部", data:-1} ]);
			[Bindable]
			public var targetUI:TableList;
			[Bindable]
			private var tabNames:Array ;
			public function set getLevelStr(level:int):void{
				switch(level){
					case Glob.PRJ_LEVEL:
						tabNames = new Array();
						tabNames.push("项目");
						tabSel.selectedIndex=0;
						break;
					case Glob.VOL_LEVEL:
						tabNames = new Array();
						if(targetUI.dataLoaderClass.parentLevel==Glob.PRJ_LEVEL){ //如果最高级别为项目
							tabNames.push("案卷");
							tabNames.push("散案卷");
						}
						if(targetUI.dataLoaderClass.parentLevel==Glob.VOL_LEVEL){//如果最高级别为案卷 则没有散案卷
							tabNames.push("案卷");
						}
						tabSel.selectedIndex=0;
						break;
					case Glob.FILE_LEVEL:
						tabNames = new Array();
						if(targetUI.dataLoaderClass.parentLevel==Glob.PRJ_LEVEL||targetUI.dataLoaderClass.parentLevel==Glob.VOL_LEVEL){// 如果最高级别为项目或者案卷
							tabNames.push("文件");
							tabNames.push("散文件");
						}
						if(targetUI.dataLoaderClass.parentLevel==Glob.FILE_LEVEL){// 最高级别为文件 则没有散文件
							tabNames.push("文件");
						}
						tabSel.selectedIndex=0;
						break;
				}
			}
			
			protected function tabItemClick(event:ItemClickEvent):void{
				
				//var toggleButt:ToggleButtonBar = ToggleButtonBar(event.currentTarget);
				if(targetUI.dataLoaderClass.pid!=-1){
					oldPid = targetUI.dataLoaderClass.pid;
				}
				if(event.index==0){ //点击第一个tab不为散
					juannei();
				}else{ // 显示散数据
					san();
				}
			}
			
			//显示散
			protected function san():void{
				targetUI.dataLoaderClass.pid = -1;
				targetUI.loadDataGrid();
			}
			//显示卷内
			protected function juannei():void{
				targetUI.dataLoaderClass.pid = oldPid;
				targetUI.loadDataGrid();
			}
			
			/**
			 * 分页监听事件
			 */
			public function set pageChanged(page:Object):void{ 
				if(page.page>1){
					goback.enabled = true;
					goback.addEventListener(MouseEvent.CLICK,go_back);
				}else{
					goback.enabled = false;
					goback.removeEventListener(MouseEvent.CLICK,go_back);
				}
				if(page.page<page.pageum){
					gonext.enabled = true;
					gonext.addEventListener(MouseEvent.CLICK,go_next);
				}else{
					gonext.enabled = false;
					gonext.removeEventListener(MouseEvent.CLICK,go_next);
				}
				var _totalnum:uint = uint(page.totalnum);
				var _pnum:uint = uint(page.page);
				var _pageum:uint = uint(page.pageum);
				if(page.page==-1){
					totalNum.text = "1/1 页  共"+_totalnum+"条数据";
				}else{
					totalNum.text = _pnum+"/"+_pageum+" 页  共"+_totalnum+"条数据";
				}
				
			}
			/**
			 * 上一页
			 */
			protected function go_back(event:MouseEvent):void{
				targetUI.dataLoaderClass.pageNumber = uint(targetUI.page.page)-1;
				targetUI.loadDataGrid();
			}
			/**
			 * 后一页
			 */
			protected function go_next(event:MouseEvent):void{
				targetUI.dataLoaderClass.pageNumber = uint(targetUI.page.page)+1;
				targetUI.loadDataGrid();
			}


			/**
			 * 选择显示条目数
			 */
			protected function pageSizeChanged(event:IndexChangeEvent):void
			{
				if(event.newIndex==4){
					targetUI.dataLoaderClass.pageNumber = -1;
				}else{
					targetUI.dataLoaderClass.pageNumber = 1;
				}
				targetUI.dataLoaderClass.pageSize = uint(showCounts[event.newIndex].data);
				targetUI.loadDataGrid();
			}

			/**
			 * 根据列出数据的每页条目数 定位下拉
			 */
			public function set changePageSize(sel:Object):void
			{
				switch(sel){
					case 50:
						comb.selectedIndex=0;
						break;
					case 100:
						comb.selectedIndex=1;
						break;
					case 500:
						comb.selectedIndex=2;
						break;
					case 1000:
						comb.selectedIndex=3;
						break;
					case -1:
						comb.selectedIndex=4;
						break;
				}
			}


			protected function enableGridEdit_click(event:MouseEvent):void
			{
				if(targetUI.dtableGrid.editable){ //关闭行编辑后.可案卷跟随刷新
					targetUI.dtableGrid.editable = false;
					enableGridEdit.toolTip = "开启行编辑";
					enableGridEdit.setStyle("skinClass",Class(EditButtonICO));
				}else{
					//开启行编辑后. 取消跟随刷新
					targetUI.dtableGrid.editable = true;
					enableGridEdit.toolTip = "关闭行编辑";
					enableGridEdit.setStyle("skinClass",Class(NoeditButtonICO));
				}
			}

		]]>
	</fx:Script>
	<fx:Binding source="{targetUI.dataLoaderClass.level}" destination="getLevelStr"/>
	<fx:Binding source="{targetUI.dataLoaderClass.pageSize}" destination="changePageSize"/>
	<fx:Binding source="{targetUI.page}" destination="pageChanged" />
	<mx:ToggleButtonBar id="tabSel" color="0x323232" horizontalGap="5" itemClick="tabItemClick(event)" dataProvider="{tabNames}">
	</mx:ToggleButtonBar>
	<s:Button id="goback" toolTip="上一页" width="16" height="16"  enabled="false" skinClass="com.thams.grid.skin.PageBackButtonICO"/>
	<s:Button id="gonext" toolTip="下一页" width="16" height="16" enabled="false"  skinClass="com.thams.grid.skin.PageNextButtonICO"/>
	<s:DropDownList id="comb" dataProvider="{showCounts}"  change="pageSizeChanged(event)" selectedIndex="0" width="70">
		
	</s:DropDownList>
	<s:Label id="totalNum">
	</s:Label>
	<s:Button id="enableGridEdit" toolTip="开启行编辑" width="16" height="16" click="enableGridEdit_click(event)" skinClass="com.thams.grid.skin.EditButtonICO"/>
</s:HGroup>

 项目用上了cairngorm 框架. 底层不好解释. 各位将就看吧.

 

贴上model类:

package com.thams.grid.model
{
	import com.adobe.cairngorm.model.IModelLocator;
	import com.thams.grid.vo.DataLoaderClass;

	[Bindable]
	public class FileDataGridModellocator implements IModelLocator
	{
		
		private static var instance:FileDataGridModellocator;
		
		public var dataProvider:Object;
		public var dataLoaderClass:DataLoaderClass ;
		
		
		//用于分页使用
		public var page:Object;
		
		//个性设置.显示字段定义
		public var columnHeaderList:Object;
		
		//定义视图状态,方便后台与前台交换的给用户的视觉改变
		public static var CURRENTSTATE_NO_CHANGE:uint = 0;
		public static var CURRENTSTATE_IS_CHANGE:uint = 1;
		
		//默认视图状态
		public var viewState:uint = CURRENTSTATE_NO_CHANGE;
		
		public function FileDataGridModellocator()
		{
			if(instance==null){
				instance = this;
			}
		}
		
		public static function getInstance():FileDataGridModellocator{
			if(instance==null){
				instance = new FileDataGridModellocator();
			}
			return instance;
		}
	}
}

 

DataLoaderClass 是条件封装查询类:

 

package com.thams.grid.vo
{
	import com.adobe.cairngorm.vo.IValueObject;
	
	/**
	 * 查询参数封装类
	 */
	[Bindable]
	public class DataLoaderClass implements IValueObject
	{
		/**
		 * 
		 * 加载数据
		 * 
		 * level 默认传入 -1 代表数据库自动判断最高级别 <br>
		 * 数据库格式如下: <br>
		 * switch (level) { <br>
		 *	case 0:
		 *		return EOperLevelType.D_PRJ_LEVEL; <br>
		 *	case 1: <br>
		 *		return EOperLevelType.D_VOL_LEVEL; <br>
		 *	case 2: <br>
		 *		return EOperLevelType.D_FILE_LEVEL; <br>
		 *	case 3: <br>
		 *		return EOperLevelType.E_EFILE_LEVEL; <br>
		 *	case 4: <br>
		 *		return EOperLevelType.W_QT_LEVEL; <br>
		 *	default: <br>
		 *		return EOperLevelType.D_FILE_LEVEL; <br>
		 *	} <br>
		 * 
		 */
		public var level:int;
		/**
		 * 当前最高级别
		 */
		public var parentLevel:int;
		public var libcode:int;
		public var searchFromFields:String = "*";
		public var qxwhere:String = "";
		public var orderBy:String ;
		public var pageNumber:int = 1;//默认为第一页
		public var pageSize:int = 50;//默认条目数为50
		public var qzh:String;
		public var pid:int = -1; //默认为不属于任何项目或者案卷的条目
		
		public var flhwhere:String = ""; // 单独为项目级做的检索机制. 因为项目级不继承分类条件
		/**
		 * attr 归档前后 0为归档后 1为归档前
		 */
		public var attr:int = 0;
		public function DataLoaderClass()
		{
			
		}
	}
}
 

 

个人备查


flex4 分页 原创

你可能感兴趣的:(框架,Flex,qt,Adobe,Go)