Flex分页控件

来源:互联网 发布:勃朗宁m1910淘宝 编辑:程序博客网 时间:2024/05/01 07:27

提到分页大家应该都很熟悉了,几乎所有的应用中都会用到。因而完成一个分页组件在不同的应用中进行复用是必须的,刚写完了一个flex分页的组件,拿来分享一下。如果有什么建议、问题欢迎大家提出。希望可以为flex的开发者们提供一个可靠的分页组件。

                                                                                                   

package utils.page

{

   import flash.events.MouseEvent;

   

   import mx.controls.Button;

   import mx.controls.Label;

   

   //分页组件类

   //描述:本类主要负责对分页相关的按钮以及信息显示的标签进行管理;对数据显示内容进行控制

   publicclass PageComponent

    {

      //首页按钮

      privatevar firstButton:Button;

      //下一页按钮

      privatevar nextButton:Button;

      //前一页按钮

      privatevar previousButton:Button;

      //最后页按钮

      privatevar lastButton:Button;

      //当前页信息显示

      privatevar curPageInfoLbl:Label;

      //所有页信息显示

      privatevar totalPageInfoLbl:Label;

      //当前页改变时数据处理方法

      privatevar handleDataFun:Function;

      //分页数据的处理类

      privatevar page:PageUtils;

      

      //first,next,previous,last:第一页,下一页,上一页,最后页的button

      //curPageInfoLbl,totalPageInfoLbl:当前页,所有页信息显示的label

      //handleDataFun:分页的页码改变后数据的处理函数,该函数符合的签名为:(data:Array):void

      //exeFun:查询数据的sql,该函数的签名为:(sql:String):Array

      //pageNum:每页显示数据条数

      publicfunction PageComponent(first:Button,next:Button,previous:Button,last:Button,curPageInfoLbl:Label,

                                     totalPageInfoLbl:Label,handleDataFun:Function,exeFun:Function,pageNum:int)

       {

          //分页按钮初始化

          this.firstButton=first;

          this.nextButton=next;

          this.previousButton=previous;

          this.lastButton=last;

          

          //分页信息显示控件初始化

          this.curPageInfoLbl=curPageInfoLbl;

          this.totalPageInfoLbl=totalPageInfoLbl;

          

          //页面改变后数据处理函数

          this.handleDataFun=handleDataFun;

          

          //分页数据类初始化

          this.page=new PageUtils(exeFun,pageNum);

          

          //为分页按钮增加相应的事件处理函数

          this.firstButton.addEventListener(MouseEvent.CLICK,firstButtonClicked);

          this.nextButton.addEventListener(MouseEvent.CLICK,nextButtonClicked);

          this.previousButton.addEventListener(MouseEvent.CLICK,previousButtonClicked);

          this.lastButton.addEventListener(MouseEvent.CLICK,lastButtonClicked);

       }

      

      //需要分页查询的的sql

      publicfunction initSql(sql:String):void

       {

          this.page.initSqlAndInitDataIfNecessary(sql);       

           setButtonStatus();

           setLabelInfo();

          this.handleDataFun(page.getPageData());

       }

 

      //分页按钮被点击时的处理逻辑为:

      //1.设置当前数据的页数

      //2.设置分页控件按钮的状态

      //3.设置分页控件信息显示label的内容

      //4.查询该页数据并执行数据处理函数

      

      //点击第一页时触发的事件

      publicfunction firstButtonClicked(event:MouseEvent):void

       {

           page.setCurrentPage(1);

           setButtonStatus();

           setLabelInfo();

          this.handleDataFun(page.getPageData());

       }

      

      //点击下一页时触发的事件

      publicfunction nextButtonClicked(event:MouseEvent):void

       {

          if(page.getCurrentPage()<page.getPageCount())

           {

              page.setCurrentPage(page.getCurrentPage()+1);

           }

           setButtonStatus();

           setLabelInfo();

          this.handleDataFun(page.getPageData());

       }

      

      //点击上一页时触发的事件

      publicfunction previousButtonClicked(event:MouseEvent):void

       {

          if(page.getCurrentPage()>1)

           {

              page.setCurrentPage(page.getCurrentPage()-1);

           }

           setButtonStatus();

           setLabelInfo();

          this.handleDataFun(page.getPageData());

       }

      

      //点击最后页时触发的事件

      publicfunction lastButtonClicked(event:MouseEvent):void

       {

           page.setCurrentPage(page.getPageCount());

           setButtonStatus();

           setLabelInfo();

          this.handleDataFun(page.getPageData());

       }

      

      //设置所有分页按钮的状态为不可用

      privatefunction setAllButtonStatusDisabled():void

       {

          this.firstButton.enabled=false;

          this.previousButton.enabled=false;

          this.nextButton.enabled=false;

          this.lastButton.enabled=false;

       }

      

      //设置分页按钮的状态

      //步骤为:

      //     1.首先设置所有分页按钮的状态为不可用

      //     2.判断是否需要启用某些分页按钮(仅当查询有数据并且数据页数大于一的时候才有必要)

      //         2.1如果需要启用某些按钮分为三种情况:

      //            2.1.1位于第一页那么下一页和最后页的按钮可用

      //            2.1.2位于中间页那么所有按钮可用

      //            2.1.3位于最后也那么上一页和第一页的按钮可用

      privatefunction setButtonStatus():void

       {

           setAllButtonStatusDisabled();

          if(page.getTotalCount()>0&&page.getPageCount()>1)

           {

             if(page.getCurrentPage()==1)

              {

                 this.nextButton.enabled=true;

                 this.lastButton.enabled=true;

              }

             elseif(page.getCurrentPage()<page.getPageCount()&&page.getCurrentPage()>1)

              {

                 this.nextButton.enabled=true;

                 this.firstButton.enabled=true;

                 this.previousButton.enabled=true;

                 this.lastButton.enabled=true;

              }

             elseif(page.getCurrentPage()==page.getPageCount())

              {

                 this.firstButton.enabled=true;

                 this.previousButton.enabled=true;

              }            

           }

       }  

      

      //设置查询结果分页信息的label内容

      privatefunction setLabelInfo():void

       {

          this.totalPageInfoLbl.text=""+page.getPageCount()+"";

          this.curPageInfoLbl.text="当前第"+page.getCurrentPage()+"";

       }

      

    }

}

 

 

 

package utils.page

{

   import entity.ConsumptionRecord;

   

   //分页数据组件类

   //描述:本类主要负责对分页数据的状态进行控制,以及进行查询数据

   publicclass PageUtils

    {

      //查询数据的函数

      privatevar exeFun:Function;

      

      //分页查询的sql

      privatevar sql:String;

      //每页显示的记录条数

      privatevar pageNumber:int=0;

      //当前查询的记录总数

      privatevar totalCount:int=0;

      //当前所处的页数

      privatevar currentPage:int=0;

      //当前查询的记录总页数

      privatevar totalPage:int=0;

      

      publicfunction getPageCount():int

       {

          returnthis.totalPage;

       }

      

      publicfunction getTotalCount():int

       {

          returnthis.totalCount;

       }

      

      publicfunction getCurrentPage():int

       {

          returnthis.currentPage;

       }

      

      publicfunction setCurrentPage(pageNum:int):void

       {

          this.currentPage=pageNum;

       }

      

      //构造函数, exeFun为查询数据的函数,签名需要符合:(sql:String):Array

      //         pageNum为每页显示记录数,默认为10

      publicfunction PageUtils(exeFun:Function,pageNum:int=10)

       {

          this.exeFun=exeFun;

          this.pageNumber=pageNum;

       }

      

      //初始化查询sql,如果必要那么进行分页数据的初始化

      //具体步骤为:

      //         1.如果本次查询和上次查询的sql不一样,那么进行分页数据初始化

      //         2.构造查询记录总数的sql

      //         3.根据查询记录总数的结果初始化本类的相关变量,如果没有返回结果那么使用默认值:0

      publicfunction initSqlAndInitDataIfNecessary(sql:String):void

       {

          if(this.sql!=sql)

           {

             this.sql=sql;

             var countSql:String="SELECT COUNT(*) COUNT_NUMBER "+sql.substring(sql.indexOf("FROM"));

             var data:Array=exeFun(countSql);

             if(data!=null)

              {  

                 //设置总条数

                 this.totalCount=data[0].COUNT_NUMBER;

                 //设置总页数

                 this.totalPage=this.totalCount%this.pageNumber==0?this.totalCount/this.pageNumber:this.totalCount/this.pageNumber+1;

                 //设置当前页

                 this.currentPage=1;

              }  

           }

       }

      

      //获取分页数据的方法

      publicfunction getPageData():Array

       {

          var tempSql:String=this.sql+getLimitOffsetSuffix(this.pageNumber,(this.currentPage-1)*this.pageNumber);

          return exeFun(tempSql);           

       }

      

      //为查询sql增加分页条件

      privatefunction getLimitOffsetSuffix(limit:int,offset:int):String

       {

          return" LIMIT "+limit+" OFFSET "+offset;

       }

 

    }

}

 

原创粉丝点击