zoukankan      html  css  js  c++  java
  • Flex分页控件

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

                                                                                                       

    package utils.page

    {

        import flash.events.MouseEvent;

       

        import mx.controls.Button;

        import mx.controls.Label;

       

        //分页组件类

        //作者:孙镜涛

        //日期:2010-01-12

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

        public class PageComponent

        {

           //首页按钮

           private var firstButton:Button;

           //下一页按钮

           private var nextButton:Button;

           //前一页按钮

           private var previousButton:Button;

           //最后页按钮

           private var lastButton:Button;

           //当前页信息显示

           private var curPageInfoLbl:Label;

           //所有页信息显示

           private var totalPageInfoLbl:Label;

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

           private var handleDataFun:Function;

           //分页数据的处理类

           private var page:PageUtils;

          

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

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

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

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

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

           public function 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

           public function initSql(sql:String):void

           {

               this.page.initSqlAndInitDataIfNecessary(sql);       

               setButtonStatus();

               setLabelInfo();

               this.handleDataFun(page.getPageData());

           }

     

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

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

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

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

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

          

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

           public function firstButtonClicked(event:MouseEvent):void

           {

               page.setCurrentPage(1);

               setButtonStatus();

               setLabelInfo();

               this.handleDataFun(page.getPageData());

           }

          

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

           public function nextButtonClicked(event:MouseEvent):void

           {

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

               {

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

               }

               setButtonStatus();

               setLabelInfo();

               this.handleDataFun(page.getPageData());

           }

          

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

           public function previousButtonClicked(event:MouseEvent):void

           {

               if(page.getCurrentPage()>1)

               {

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

               }

               setButtonStatus();

               setLabelInfo();

               this.handleDataFun(page.getPageData());

           }

          

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

           public function lastButtonClicked(event:MouseEvent):void

           {

               page.setCurrentPage(page.getPageCount());

               setButtonStatus();

               setLabelInfo();

               this.handleDataFun(page.getPageData());

           }

          

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

           private function 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位于最后也那么上一页和第一页的按钮可用

           private function setButtonStatus():void

           {

               setAllButtonStatusDisabled();

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

               {

                  if(page.getCurrentPage()==1)

                  {

                      this.nextButton.enabled=true;

                      this.lastButton.enabled=true;

                  }

                  else if(page.getCurrentPage()<page.getPageCount()&&page.getCurrentPage()>1)

                  {

                      this.nextButton.enabled=true;

                      this.firstButton.enabled=true;

                      this.previousButton.enabled=true;

                      this.lastButton.enabled=true;

                  }

                  else if(page.getCurrentPage()==page.getPageCount())

                  {

                      this.firstButton.enabled=true;

                      this.previousButton.enabled=true;

                  }            

               }

           }  

          

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

           private function setLabelInfo():void

           {

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

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

           }

          

        }

    }

     

     

     

    package utils.page

    {

        import entity.ConsumptionRecord;

       

        //分页数据组件类

        //作者:孙镜涛

        //日期:2010-01-12

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

        public class PageUtils

        {

           //查询数据的函数

           private var exeFun:Function;

          

           //分页查询的sql

           private var sql:String;

           //每页显示的记录条数

           private var pageNumber:int=0;

           //当前查询的记录总数

           private var totalCount:int=0;

           //当前所处的页数

           private var currentPage:int=0;

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

           private var totalPage:int=0;

          

           public function getPageCount():int

           {

               return this.totalPage;

           }

          

           public function getTotalCount():int

           {

               return this.totalCount;

           }

          

           public function getCurrentPage():int

           {

               return this.currentPage;

           }

          

           public function setCurrentPage(pageNum:int):void

           {

               this.currentPage=pageNum;

           }

          

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

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

           public function PageUtils(exeFun:Function,pageNum:int=10)

           {

               this.exeFun=exeFun;

               this.pageNumber=pageNum;

           }

          

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

           //具体步骤为:

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

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

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

           public function 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;

                  }  

               }

           }

          

           //获取分页数据的方法

           public function getPageData():Array

           {

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

               return exeFun(tempSql);           

           }

          

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

           private function getLimitOffsetSuffix(limit:int,offset:int):String

           {

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

           }

     

        }

    }

     

     

     

    使用该代码你需要做什么:

               //处理分页数据的方法

               private function bindDataToGrid(data:Array):void

               {

                  //将数据绑定到DataGrid

                  dataGrid.dataProvider=data;

               }

               //执行数据查询的方法

                public static function execute(sql:String):Array

               {     

                   sqlStatement.text=sql;

                   sqlStatement.execute();

                   return sqlStatement.getResult().data;

               }

               //查询条件改变时执行的方法

               private function searchConditionChanged():void

               {

    //初始化分页组件

    var pageComponent:PageComponent=new

    PageComponent(firstBtn,nextBtn,previousBtn,lastBtn,lblCurrentPage,lblTotalPage,bindDataToGrid,execute,20);      

    var sql:String=”select name id from users”;

    //初始化查询sql

                  pageComponent.initSql(sql);           

               }

     

    原创文章,转载请注明出处!
    All CopyRight Reserved !

     

    主页:http://jingtao.cnblogs.com

    QQ:307073463
    Email:jingtaodeemail@qq.com
    MSN:sunjingtao@live.com

  • 相关阅读:
    js 字符串转化成数字
    web项目中各种路径的获取
    个人作业——软件工程实践总结作业
    Beta 答辩总结
    Beta 冲刺 (7/7)
    Beta 冲刺 (6/7)
    Beta 冲刺 (5/7)
    Beta 冲刺 (4/7)
    Beta 冲刺 (3/7)
    软件产品案例分析(团队)
  • 原文地址:https://www.cnblogs.com/jingtao/p/1646369.html
Copyright © 2011-2022 走看看