1.原先写过.net的分页控件,现在公司换技术,要用flex了。必须也要一个分页控件。他俩的基本思路是一样的,不过具体的处理还是有差别的。例如:原先点击连接要提交本页面,现在是富客户端,不用提交了。。。
一 :分页控件的代码如下:(Pagination.mxml)
<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" width="960" height="32"
creationComplete="init()">
<mx:Script>
<![CDATA[
import mx.controls.*;
import mx.collections.ArrayCollection;
[Bindable]public var totalNum:int = 0; // 总件数
[Bindable]public var showNum:int = 50; // 每页显示的件数
[Bindable]public var nowPageId:int = 1; // 当前显示的页面Id
[Bindable]public var mainApp:Object = null; // 指定的父窗口
[Bindable]public var callbackFunction:Function; //回调函数
[Bindable]private var totalPageNum:int = 0; // 总页数
[Bindable]private var showIndex:int = 2; // 每页显示的件数 的index
// 控件初始化函数
private function init():void
{
// 特除值过滤
if(showNum==0)
{
showNum = 50;
}
// 获得combox的索引
showIndex = getComboxIndex(showNum);
this.cmbShowNum.selectedIndex = showIndex;
// 总页数的计算
totalPageNum = total(totalNum,showNum);
// 生成链接列表
if(nowPageId<1)
{
nowPageId=1;
}
if(nowPageId>totalPageNum)
{
nowPageId=totalPageNum;
}
addLinkButton(totalPageNum,nowPageId);
}
// 获得下拉列表combox所选择的值
public function getShowNum():int
{
return int(this.cmbShowNum.selectedItem.data.toString());
}
// 页面显示combox值的索引的计算
private function getComboxIndex(index:int):int
{
// 每页显示值设定
var intTemp:int=2;
switch(index)
{
case 10:
intTemp=0;
break;
case 20:
intTemp=1;
break;
case 50:
intTemp=2;
break;
case 100:
intTemp=3;
break;
case 500:
intTemp=4;
break;
case 1000:
showIndex=5;
break;
case -1:
intTemp=6;
break;
default:
intTemp=2;
}
return intTemp;
}
// 总页数计算
private function total(totalNum:int,showNum:int):int
{
// 临时总页数
var intTemp:int=0;
try
{
// 没有数据
if(totalNum==0)
{
intTemp = 0;
}
else
{//有数据
// 每页显示不受限制
if(showNum==-1)
{
intTemp=1;
}
else
{//每页显示受限制
// 用求余发来,算是否能整除
if(totalNum%showNum==0)
{
intTemp=totalNum/showNum;
}
else
{
intTemp=totalNum/showNum + 1;
}
}
}
}
catch(errs:Error)
{
intTemp = 0;
}
return intTemp;
}
// 生成连接列表
private function addLinkButton(toal:int,nowPageId:int):void
{
// 逻辑判断开始--start
var iStart:int=1;
var iEnd:int =1;
// LinkButton生成对象
var obj:LinkButton;
// LinkButton的x位置
var lx:int = 5;
// 没有数据的时候
if(0==toal)
{
obj=new LinkButton();
obj.x=300;
obj.y=2;
obj.label="|<<";
// 关闭鼠标放上去的式样变化
obj.mouseEnabled = false;
obj.mouseFocusEnabled = false;
cavLinks.addChild(obj);
obj=new LinkButton();
obj.x=340;
obj.y=2;
obj.label="0";
// 关闭鼠标放上去的式样变化
obj.mouseEnabled = false;
obj.mouseFocusEnabled = false;
cavLinks.addChild(obj);
obj=new LinkButton();
obj.x=380;
obj.y=2;
obj.label=">>|";
// 关闭鼠标放上去的式样变化
obj.mouseEnabled = false;
obj.mouseFocusEnabled = false;
cavLinks.addChild(obj);
return;
}
// 只有一页数据,且每页显示的件数 是“無制限”
if(1==toal &&showIndex==6)
{
obj=new LinkButton();
obj.x=300;
obj.y=2;
obj.label="|<<";
// 关闭鼠标放上去的式样变化
obj.mouseEnabled = false;
obj.mouseFocusEnabled = false;
cavLinks.addChild(obj);
obj=new LinkButton();
obj.x=340;
obj.y=2;
obj.label="1";
obj.setStyle("color","red");
obj.addEventListener(MouseEvent.CLICK,goToPage);
cavLinks.addChild(obj);
obj=new LinkButton();
obj.x=380;
obj.y=2;
obj.label=">>|";
// 关闭鼠标放上去的式样变化
obj.mouseEnabled = false;
obj.mouseFocusEnabled = false;
cavLinks.addChild(obj);
return;
}
if(toal<=10)
{
if(toal<=5)
{
lx = 200;
}
// 开始位置打印
iEnd = toal;
obj=new LinkButton();
obj.x=lx;
obj.y=2;
obj.label="|<<";
// 关闭鼠标放上去的式样变化
obj.mouseEnabled = false;
obj.mouseFocusEnabled = false;
cavLinks.addChild(obj);
lx+=30
// 开始添加linkbutton
for(var i:int=iStart;i<=iEnd;i++)
{
obj=new LinkButton();
obj.x=lx;
obj.y=2;
obj.label=i.toString();
if(i==nowPageId)
{
obj.setStyle("color","red");
// 关闭鼠标放上去的式样变化
obj.mouseEnabled = false;
obj.mouseFocusEnabled = false;
}
else
{
obj.addEventListener(MouseEvent.CLICK,goToPage);
}
cavLinks.addChild(obj);
lx+=30;
}
// 结束位置
obj=new LinkButton();
obj.x=lx;
obj.y=2;
obj.label=">>|";
// 关闭鼠标放上去的式样变化
obj.mouseEnabled = false;
obj.mouseFocusEnabled = false;
cavLinks.addChild(obj);
return;
}
if(toal>10)
{
// 开始位置打印
iEnd = toal;
obj=new LinkButton();
obj.x=lx;
obj.y=2;
obj.label="|<<";
if(nowPageId>1)
{
obj.addEventListener(MouseEvent.CLICK,goToPage);
}
else
{
// 关闭鼠标放上去的式样变化
obj.mouseEnabled = false;
obj.mouseFocusEnabled = false;
}
cavLinks.addChild(obj);
lx+=35
// 计算开始,结束位置
iStart = nowPageId-5;
if(iStart<=1)
{
iStart=1;
iEnd=10;
}
else
{
iEnd=nowPageId+4;
if(iEnd>toal)
{
iEnd=toal;
iStart=iEnd-9;
}
}
// 开始添加linkbutton
for(var j:int=iStart;j<=iEnd;j++)
{
obj=new LinkButton();
obj.x=lx;
obj.y=2;
obj.label=j.toString();
if(j==nowPageId)
{
obj.setStyle("color","red");
// 关闭鼠标放上去的式样变化
obj.mouseEnabled = false;
obj.mouseFocusEnabled = false;
}
else
{
obj.addEventListener(MouseEvent.CLICK,goToPage);
}
cavLinks.addChild(obj);
lx+=35;
}
// 结束位置
obj=new LinkButton();
obj.x=lx;
obj.y=2;
obj.label=">>|";
if(nowPageId<toal)
{
obj.addEventListener(MouseEvent.CLICK,goToPage);
}
else
{
// 关闭鼠标放上去的式样变化
obj.mouseEnabled = false;
obj.mouseFocusEnabled = false;
}
cavLinks.addChild(obj);
}
// 逻辑判断开始--end
}
// linkButton事件
private function goToPage(e:Event):void
{
var obj:Object = e.target;
var sPageId:String = obj.label;
var iPageId:int;
if(sPageId=="|<<")
{
sPageId = "1";
}
if(sPageId==">>|")
{
sPageId = totalPageNum.toString();
}
iPageId = int(sPageId);
// 调用容器的方法提交
callbackFunction.call(mainApp, iPageId);
}
]]>
</mx:Script>
<!-- 打印页数链接 -->
<mx:Canvas right="480" y="1" width="470" height="30" id="cavLinks"
textAlign="right" >
</mx:Canvas>
<!-- 基本表示信息 -->
<mx:Canvas right="10" y="1" width="470" height="30" id="cavPages"
textAlign="right" >
<!-- 分页控件部分一:总页数信息 -->
<mx:Label right="110" y="3" id="lbltotal" text="( 総件数:{totalNum}件,総頁数:{totalPageNum}頁 ) 最大表示件数:" fontSize="12"/>
<!-- 分页控件部分二:每页显示信息条数 -->
<mx:ComboBox right="30" y="1" id="cmbShowNum" width="80" fontSize="11">
<mx:dataProvider>
<mx:Array>
<mx:Object data="10" label="10" />
<mx:Object data="20" label="20"/>
<mx:Object data="50" label="50"/>
<mx:Object data="100" label="100"/>
<mx:Object data="500" label="500"/>
<mx:Object data="1000" label="1000"/>
<mx:Object data="-1" label="無制限"/>
</mx:Array>
</mx:dataProvider>
</mx:ComboBox>
<mx:Label right="5" y="3" text="件" fontSize="12"/>
</mx:Canvas>
</mx:Canvas>
二:调用页面代码:(test.mxml)
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:ns1="*"
creationComplete="initPagin(1000)">
<mx:Script>
<![CDATA[
import mx.controls.Alert;
import mx.controls.*;
public var fen:Pagination=null;
// 第一次初始化控件
public function initPagin(toal:int):void
{
// 生成分页控件
fen= new Pagination();
// 总页数
fen.totalNum=toal;
fen.mainApp=this;
// 指定回调函数
fen.callbackFunction = callBackFunction;
this.addChild(fen);
}
// 重构控件
public function replacePagin(pageId:int,total:int,showNum:int):void
{
// 移除原先的控件
this.removeChild(fen);
// 生成分页控件
fen= new Pagination();
// 总页数
fen.totalNum=total;
// 每页显示的个数
fen.showNum =showNum;
// 显示第几页
fen.nowPageId =pageId;
// 在本页面生成
fen.mainApp=this;
// 指定回调函数,来提交
fen.callbackFunction = callBackFunction;
this.addChild(fen);
}
// 回调函数
public function callBackFunction(pageId:int):void
{
replacePagin(pageId,fen.totalNum,fen.getShowNum());
}
]]>
</mx:Script>
</mx:Application>