Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3352008
  • 博文数量: 530
  • 博客积分: 13360
  • 博客等级: 上将
  • 技术积分: 5473
  • 用 户 组: 普通用户
  • 注册时间: 2006-07-13 13:32
文章分类

全部博文(530)

文章存档

2017年(1)

2015年(2)

2013年(24)

2012年(20)

2011年(97)

2010年(240)

2009年(117)

2008年(12)

2007年(8)

2006年(9)

分类:

2009-09-08 11:42:58





下面的程序只是参考
-------------张金山的-----------------
http://www.talentdigger.cn/home/space.php?uid=725&do=blog&id=1235

Flex中分页控件以及实例

2009-04-04 12:45



   
               /*
            自定义datagrid控件元素
            总共的页数
            当前页面的页码
            所有的记录数
            当前也的记录
            没有翻页的记录
           
        */
            import mx.collections.ArrayCollection;
            [Bindable]
            private var mypagedata:ArrayCollection = new ArrayCollection();//当前也没种该显示的记录
            [Bindable]
            public var mygridcolumns:Array;
            public var mydata:ArrayCollection;//所有的数据
            public var pagecount:int=20;//表示每页记录的条数,默认10条,可以由用户自行定义
            public var curpage:int;//当前的页码
            public var totalpage:int;//一共的页数
            public var totalcount:int;//一共的记录条数
           
            public function initdata(value:ArrayCollection):void
            {
                mydata = value;//将所有数据都赋值给mydata变量
                mypagedata.removeAll();//移出当前页面中所有数据记录
               
                if(mydata.length>0 && null!=mydata)
                {
                    totalcount = mydata.length;
                    totalpage = (totalcount + pagecount - 1) / pagecount;
                    setPager(0);
                    inputpage.minimum=1;
                    inputpage.maximum=totalpage;
                }else{
                    totalcount = 0;
                    totalpage = 0;
                    curpage = 0;
                    inputpage.minimum = 0;
                    inputpage.maximum = 0;
                    pagedetail.text = "第0页/共0页   共0条纪录";
                }
            }
            public function setPager(value:int):void
            {
                if(value<0 || value>=totalpage) return;
                curpage = value;
                var curNum:int = value*pagecount;//计算出要跳转到的页面种的第一条记录在所有的记录种是第几条记录
                mypagedata.removeAll();//移出变量中的数据,以便插入新数据,页面中显示的是这个变量中的数据
                for(var i:int=0;curNum                //循环的次数既要小于所有的记录数,也要小于每个页面能显示的记录数;并且curNum变量中的值也要增加
                {
                    mypagedata.addItem(mydata.getItemAt(curNum));//依次抽取记录
                }
                var temp:int = curpage+1;//页码中第一张页面是0,也就是说实际显示的页码是+1后的值
                pagedetail.text = "第"+temp+"页/共"+totalpage+"页   共条"+totalcount+"记录";
            }
        ]]>
   

   
         columns="{mygridcolumns}" width="100%" height="100%">
   

   
       
       
       
       
       
       
       
       
       
   

******************************************************************************


          
           
           
           
           
          

        

-------------张金山的-----------------



------------- huanglin-----------------

http://dev.csdn.net/article/53/53659.shtm

使用方法

id="pageSelector"

                             numPagesToDisplay="5"   

                             pageSelected="kmfspx(kmfstaxis)" 

                             borderStyle="none" 

                            showZero="0"   

                            MaxRows="1212"  

                           SimplePageRows="20" 

/>

查询时要用到的变量有 

as 文件中        pageSelector.Startrow  当前选择页对应的数据库开始记录 

                        pageSelector.Endrow   当前选择页对应的数据库结束记录 

 

PageSelector.mxml 文件内容



   
       

        private var __currentPage : Number = 1;
        private var __totalPages : Number = 0;
        private var repeaterStartIndex : Number = 0;
        private var pageStringLength : Number;
        private var currentButton : mx.controls.Link;
      
        public var __showZero:Number=0;
  
  private var __MaxRows: Number =0;//得到的总行数
  private var __SimplePageRows: Number;//单页要有的行数

 

  //通过页数计算开始记录数
  function get Startrow():Number
  {
   return (((currentPage-1)*SimplePageRows)+1);
  }
  
  //返回当前页的结束记录数
  function get Endrow():Number
  {
   var re:Number=0;
   if (currentPage != totalPages)
   {
    re = currentPage*SimplePageRows;
   }
   else if (currentPage == totalPages)
   {
    re =MaxRows;
   }
   
   return re;
  }


        [ChangeEvent("MaxRowsChanged")]
        function get showZero() : Number
        {
            return __showZero;
        }
          
       function set showZero(tp : Number) : Void
        {
         __showZero=tp;
         mathcountpage();
  }


  
        [ChangeEvent("MaxRowsChanged")]
        function get MaxRows() : Number
        {
            return __MaxRows;
        }
          
       function set MaxRows(tp : Number) : Void
        {
         __MaxRows=tp;
         mathcountpage();
  }

        [ChangeEvent("SimplePageRowsChanged")]
        function get SimplePageRows() : Number
        {
            return __SimplePageRows;
        }
          
       function set SimplePageRows(tp : Number) : Void
        {
         __SimplePageRows=tp;
         mathcountpage();
  }
  
  function mathcountpage()
  {
   var a:Number = __MaxRows ;
   var b:Number = __SimplePageRows;
         totalPages =(a -(a%b))/b +(((a%b)>0)?1:0);   
  }
  
        [ChangeEvent("pageArrayChanged")]
        private var pageArray : Array;

        public var numPagesToDisplay : Number;

        [ChangeEvent("pageSelected")]
        function get currentPage() : Number
        {
            return __currentPage;
        }

        function set currentPage(cp : Number) : Void
        {
            __currentPage = cp;
            dispatchEvent({type: 'pageSelected'});
        }

        [ChangeEvent("totalPagesChanged")]
        function get totalPages() : Number
        {
            return __totalPages;
        }

        function set totalPages(tp : Number) : Void
        {
            __totalPages = tp;
            if (pageArray == null) pageArray = new Array();
            if (tp > pageArray.length)
            {
                for (var i = pageArray.length+1; i <= tp; ++i)
                {
                    pageArray.push(i);
                }
            }
            else if (tp < pageArray.length)
            {
                pageArray.splice(tp);
            }

            pageStringLength = String(tp).length;

            dispatchEvent({type: 'totalPagesChanged'});
            dispatchEvent({type: 'pageArrayChanged'});
        }

        private function moveToBeginning()
        {
            repeaterStartIndex = 0;
            updateCurrentButton(undefined);
        }

        private function moveToEnd()
        {
            var mod = totalPages % numPagesToDisplay;
            if (mod == 0) mod = numPagesToDisplay;
            repeaterStartIndex = totalPages - mod;
            updateCurrentButton(undefined);
        }

        private function previousPageGroup()
        {
            if (repeaterStartIndex - numPagesToDisplay >= 0)
            {
                updateCurrentButton(undefined);
                repeaterStartIndex -= numPagesToDisplay;
            }
        }

        private function nextPageGroup()
        {
            if (repeaterStartIndex + numPagesToDisplay < totalPages)
            {
                updateCurrentButton(undefined);
                repeaterStartIndex += numPagesToDisplay;
            }
        }

        private function selectPage(page) : Void
        {
            currentPage = page.getRepeaterItem();
            updateCurrentButton(page);
        }

        function updateCurrentPage(newCurrentPage : Number) : Void
        {
            var butIndex = newCurrentPage % numPagesToDisplay;
            repeaterStartIndex = newCurrentPage - butIndex;
            selectPage(pageButton[butIndex]);
        }

        private function updateCurrentButton(cb : mx.controls.Link) : Void
        {
            if (currentButton != undefined)
            {
                currentButton.setStyle("color", undefined);
            }
            if (cb != undefined)
            {
                cb.setStyle("color", 0xAA0000);
            }
            currentButton = cb;
        }

        private function formatPageNumber(num : Number) : String
        {
            var str : String = String(num);
            var diff : Number = pageStringLength - str.length;     
            if (showZero==1)   
            switch(diff)
            {
                case 0 : return str;
                case 1 : return "0" + str;
                case 2 : return "00" + str;
                case 3 : return "000" + str;
                case 4 : return "0000" + str;
                case 5 : return "00000" + str;
                default : return str; //don't worry about it
            }
            else
            {
             return str;
            }
 
 
        }

        ]]>
   

   
        [Event("pageSelected")]
   

   

   
            startingIndex="{repeaterStartIndex}" count="{numPagesToDisplay}">

       

   
   
   


------------- huanglin-----------------

---------------------

发一个flex分页控件的源码

参照airia.cn上面的代码,自己重写了这个分页控件,代码呈上,不足之处请指正。
1)、定义一个“页面改变事件
  1. package
  2. {
  3.         import flash.events.Event;
  4.         public class PageChangeEvent extends Event
  5.         {
  6.                 private var _pageIndex:int;
  7.                 private var _pageSize:int;
  8.                 public static const CHANGED:String="PageChange";
  9.                 public function PageChangeEvent(type:String,pageIndex:int,pageSize:int)
  10.                 {
  11.                         super(type);
  12.                         _pageIndex=pageIndex;
  13.                         _pageSize=pageSize;
  14.                 }
  15.                 public function fitler(rs:Array):Array
  16.                 {
  17.                         //这个方法依据构造此“事件类”时的参数过滤出当前页面要显示的记录,返回一个数组
  18.                         var newRs:Array=new Array();
  19.                        
  20.                         var start:int=_pageIndex*_pageSize;
  21.                         var end:int=start+_pageSize;
  22.                         for(var i:int=start;i
  23.                         {
  24.                                 if(i
  25.                                 {                                       
  26.                                         newRs.push(rs[i]);
  27.                                 }
  28.                                 else
  29.                                 {
  30.                                         break;
  31.                                 }
  32.                         }                       
  33.                         return newRs;
  34.                 }
  35.                
  36.         }
  37. }
复制代码
2)、定义一个分页的组件

  1. mxml" width="506" height="46">
  2.        
  3.                 [Event(name="PageChange",type="PageChangeEvent",bubbles="true",cancelable="true" )]
  4.        
  5.                
  6.                
  7.                
  8.                
  9.                
  10.                
  11.                        
  12.        
  13.        
  14.        
  15.                 //总记录数
  16.                 private var mRecordCount:int=0;
  17.                 //每页要显示的记录数,默认为20
  18.                 private var mPageSize:int =20;
  19.                 //起始页的索引
  20.                 private var mPageIndex:int =0;
  21.                 //总页数
  22.                 private var mPageCount:int = 0;
  23.                 public function prevPage():void
  24.                 {
  25.                         mPageIndex-=1;
  26.                         setState();
  27.                 }
  28.                 public function firstPage():void
  29.                 {
  30.                         mPageIndex =0;
  31.                         setState();
  32.                 }
  33.                 public function nextPage():void
  34.                 {
  35.                         mPageIndex+=1;
  36.                         setState();
  37.                 }
  38.                 public function lastPage():void
  39.                 {
  40.                         mPageIndex=mPageCount-1;
  41.                         setState();
  42.                 }
  43.                 //以上几个方法一样,就不说了
  44.                 public function cbChange():void
  45.                 {
  46.                         //依据下拉列表来获得当前的页索引值
  47.                         mPageIndex = cb.selectedItem.data;
  48.                         setState();
  49.                 }
  50.                 //设置记录总数
  51.                 public function set RecordCount(value:int):void
  52.                 {
  53.                         //设置记录的总数
  54.                         if(value<0)
  55.                         {
  56.                                 value=0;
  57.                         }
  58.                         mRecordCount= value;  
  59.                         setState();

  60.                 }
  61.                 public function set pageSize(value:int):void
  62.                 {
  63.                         if(value>mRecordCount)
  64.                         {
  65.                                 value=mRecordCount;
  66.                         }
  67.                         if(value<1)
  68.                         {
  69.                                 value=1;
  70.                         }
  71.                         mPageSize=value;
  72.                         setState()
  73.                        
  74.                 }
  75.                 private function setState():void
  76.                 {
  77.                         if(mRecordCount%mPageSize > 0)
  78.                         {
  79.                                 //“求模”算出一共有多少页
  80.                                 mPageCount = mRecordCount/mPageSize+1;
  81.                         }
  82.                         else
  83.                         {
  84.                                 mPageCount = mRecordCount/mPageSize;
  85.                         }
  86.                         //建一个数组做为combobox的数据源,用来跳转页
  87.                         var pages:Array = new Array();
  88.                         for(var i:int=1;i<=mPageCount;i++)
  89.                         {
  90.                                 pages.push({label:i.toString(),data:i-1});
  91.                         }
  92.                         cb.dataProvider= pages;
  93.                         cb.selectedIndex= mPageIndex;
  94.                         if(mPageCount>1)
  95.                         {
  96.                                 firstBtn.enabled=true;
  97.                                 nextBtn.enabled=true;
  98.                                 prevBtn.enabled=true;
  99.                                 lastBtn.enabled=true;
  100.                                 if(mPageIndex==0)
  101.                                 {
  102.                                         prevBtn.enabled=false;
  103.                                         firstBtn.enabled=false;
  104.                                 }
  105.                                 if(mPageIndex == mPageCount-1)
  106.                                 {
  107.                                         nextBtn.enabled=false;
  108.                                         lastBtn.enabled=false;
  109.                                 }
  110.                         }
  111.                         else
  112.                         {
  113.                                 firstBtn.enabled=false;
  114.                                 nextBtn.enabled=false;
  115.                                 prevBtn.enabled=false;
  116.                                 lastBtn.enabled=false;
  117.                         }
  118.                         pageInfo.text=mRecordCount+"记录/" + mPageCount+"页";
  119.                         OnPageChange();
  120.                 }  
  121.                 //打开分页控件
  122.                 public function Open():void{
  123.                         mPageIndex =0;
  124.                         OnPageChange();
  125.                 }

  126.                 private function OnPageChange():void
  127.                 {
  128.                         //依据当前页面索引和每页记录数来构造一个“页面改变事件”
  129.                         var e:PageChangeEvent = new PageChangeEvent(PageChangeEvent.CHANGED,mPageIndex,mPageSize);
  130.                         dispatchEvent(e);
  131.                 }
  132.                 ]]>
  133.        

复制代码
3)、测试用的主类


  1.        
  2.                
  3.                         import flash.events.Event;
  4.                         private var newsList:Array;
  5.                         private function oninit():void
  6.                         {
  7.                                 newsList=new Array();
  8.                                 for(var i:int=0;i<1111;i++)
  9.                                 {
  10.                                         newsList.push({userName:"myName"+i,userData:i});
  11.                                 }
  12.                                 //设定要分页的总记录数                       
  13.                                 myPageBar.RecordCount=newsList.length;
  14.                                 //设定每页要显示的记录数
  15.                                 myPageBar.pageSize=50;
  16.                                 //启用分页控件
  17.                                 myPageBar.Open();
  18.                         }
  19.                         private function pageChanged(e:PageChangeEvent):void
  20.                         {
  21.                                 dataList.dataProvider=e.fitler(newsList);                               
  22.                         }
  23.                 ]]>
  24.        
  25.         DataGrid x="54" y="44" width="543" height="227" id="dataList">
  26.                
  27.                        
  28.                        
  29.                
  30.        
  31.        
  32.        
--------------------------------------------------------------------





阅读(1466) | 评论(2) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-05-31 23:05:52

这个分页有个数据量大的问题

chinaunix网友2010-05-30 00:15:37

这个 翻到下一页的数据不能及时更新呀。