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>

posted on 2008-12-12 13:20  Stym--闫生  阅读(1181)  评论(0编辑  收藏  举报