• flex datagrid的分页显示


    1、源码主要如下:

    <?xml version="1.0" encoding="utf-8"?>
    <s:Group xmlns:fx="http://ns.adobe.com/mxml/2009"
       xmlns:s="library://ns.adobe.com/flex/spark"
       xmlns:mx="library://ns.adobe.com/flex/mx"
       width="100%" height="100%" creationComplete="init();">
    <!-- datagrid控制列表-->
    <s:layout>
       <s:HorizontalLayout/>
    </s:layout>
    <fx:Declarations>
       <!-- 将非可视元素(例如服务、值对象)放在此处 -->
    </fx:Declarations>
    <!--
    页面功能:分页控件,控制datagrid的显示。
    -->
    <fx:Script>
       <![CDATA[
        import com.surekam.WHJYFW.MC101000001.MC201000001.MC301000404.VO.CacheVO;
       
        import mx.collections.ArrayCollection;
        import mx.controls.Alert;
        import mx.controls.DataGrid;
        import mx.controls.Text;
        import spark.components.CheckBox;
       
        private var _currPage:int = 0;//当前页数
        private var _numPerPage:int = 10;//每页显示的页数
        private var _totalPage:int = 0;//数据源最大的页数
        private var _totalRecords:int = 0;//数据源的数量
        private var _dataProvider:Array = null;//控件的数据源
        private var currDS:ArrayCollection = null;//当前的数据集合
        private var scanPage:Array = new Array();//浏览过的页数
        private var _targetUI:Object = null;//使用数据源的控件
        private var _cacheMAX:int = 4;//缓存的页面的数目
        private var _callBackFun:Function = null;//回调函数
       
        [Bindable]
        private var dropSource:ArrayCollection ;
        /*
        初始化页面完毕
        */
        private function init():void{
         this.addEventListener(KeyboardEvent.KEY_UP,handlerEnter);
        
         dropSource = new ArrayCollection([{label:10},{label:20},{label:30},{label:40},{label:50}]);
         displayNumber.selectedIndex = 0;
    //     Alert.show(_currPage+" ");
        }
        /*
        处理键盘事件
        */
        private function handlerEnter(event:KeyboardEvent):void{
         if(13 == event.keyCode){
          gotoIndex();
         }
        
        }
        /*
        如果改变了显示数量的话,重新加载数据源,同时也要更新缓冲的数据源
        */
        private function changeHandler(event:Event):void{
         var amount:int = parseInt((event.target as ComboBox).selectedItem.label);
         numPerPag = amount;
         /*
         重新计算分页的结果
         */
         var mod:int = _totalRecords % getNumPerPag;
         var divid:int = _totalRecords / getNumPerPag;
         totalPage = mod>0?divid+1:divid;
        
         cleanCache();
    //     if(_currPage > totalPage){
    //     
    //     }
         currPage =1;
        }
       
        /*
        清除缓冲的数据源
        */
        private function cleanCache():void{
         while(scanPage.pop()!=null){
         
         }
        }
        /*
        设置数据源的目标
        */
        public function set TargetUI(object:Object):void{
         this._targetUI = object;
        }
        /*
        当前页数
        */
        public function set currPage(page:int):void{
         this._currPage = page;
         this.btnNext.enabled = true;
         if(page<=1){
          this.btnPrevious.enabled = false;
         }else{
          this.btnPrevious.enabled = true;
         }
        
         if(page>=_totalPage){
          this.btnNext.enabled =false;
         }
        
         btnGo.enabled = true;
         displayData();
         displayInfo();
        }
        /*
       
        */
        private function displayInfo():void{
         this.txtPageIndex.text = _currPage.toString();
         lblInfo.text = "第"+_currPage+"页/共"+_totalPage+"页";
        }
        /*
        最大的页数
        */
       
        public function set totalPage(page:int):void{
         this._totalPage = page;
        }
        /*
        每页最大显示数量
        */
        public function set numPerPag(num:int):void{
         this._numPerPage = num;
         //(_targetUI as DataGrid).rowCount = num;
        }
        /*
        每页的数量
        */
        public function get getNumPerPag():int{
         return this._numPerPage;
        }
        /*
       
        */
        public function set totalRecords(record:int):void{
         this._totalRecords = record;
        }
       
        /*
        缓存的最大的数量
        */
        public function set cacheMAX(max:int):void{
         if(max<4){
          return ;
         }else{
          _cacheMAX = max;
         }
        }
       
        /*
        回调函数
        */
        public function set callBackFun(callBack:Function):void{
         this._callBackFun = callBack;
        }
        /*
        控件的数据源
        */
        public function set dataProvider(data:Array):void{
         this._dataProvider = data;
        }
       
       
        private function goto(num:int):void{
         if(-1 == num){
          currPage = _currPage-1;
         }else if(1 == num){
          currPage = _currPage+1;
         }
        
        }
       
        private function gotoIndex():void{
         var index:int = parseInt(txtPageIndex.text);
         if(index>=1 && index <= _totalPage){
          currPage = index;
         
         }else{
          //抛出错误
          throw new Error("输入不正确");
         }
        }
        /*
        更新缓冲区的数据源
        */
        private function refreshData(data:Array):void{
        
         var cacheVO:CacheVO = new CacheVO(_currPage,data);
         if(scanPage.length < _cacheMAX){
          scanPage.push(cacheVO);
         }else{
          var temp:Array = scanPage.reverse();
          temp.pop();
          temp.push(cacheVO);
          temp.reverse();
          scanPage = temp;
         }
        }
        /*
        查找哪页的数据是否在缓冲区中
        */
        private function findCache(page:int):CacheVO{
         var len:int = scanPage.length;
         var cache:CacheVO = null;
         for(var i:int =0;i<len;i++){
          cache = scanPage.pop();
          if(page == cache.pageSeq){
           return cache;
          }
         }
         return null;
        }
       
        public function displayData():void{
         if(this._dataProvider == null){
          throw new Error("数据源没设定");
         }
        
    //     else{
    //      var sourceVO:CacheVO = findCache(_currPage);
    //      if(null == sourceVO){
    //       //调用回调函数调用服务(起始序列,结束序列)
    //       _callBackFun((_currPage-1)*_numPerPage, _currPage*_numPerPage);
    //       refreshData(_dataProvider);
    //       (_targetUI as DataGrid).dataProvider = _dataProvider;
    //      }else{
    //       //更新datagrid的数据源
    //       (_targetUI as DataGrid).dataProvider = sourceVO.datasource;
    //      }
    //     
    //     }
        }
       ]]>
    </fx:Script>

    <mx:Button label="上一页" id="btnPrevious" click="goto(-1);" enabled="false" width="54"/>
    <mx:Button label="下一页" id="btnNext" click="goto(1);" enabled="false" width="54"/>
    <mx:Label text="转到"/>
    <mx:TextInput width="48" id="txtPageIndex" restrict="0-9" text=""/>
    <mx:Label text="页"/>
    <mx:Button label="确定" id="btnGo" width="54" click="gotoIndex();" enabled="false"/>
    <mx:Label text="显示数量:"/>
    <s:ComboBox id="displayNumber" dataProvider="{dropSource}"
         change="changeHandler(event);"
         selectedIndex="1" width="49"/>
    <mx:Label id="lblInfo" text=""/>
    </s:Group>


  • 相关阅读:
    [uva 11762]Race to 1[概率DP]
    为什么webview.loadUrl("javascript:function() ")不执行?
    IPhone多视图切换
    IAA32过程调用保护规则注册
    c#扩展方法简单
    Spring综合Struts2
    简单的讲Erlang一些运营商
    leetcode先刷_Pascal&#39;s Triangle II
    王立平--RemoteView
    js到字符串数组,实现阵列成一个字符串
  • 原文地址:https://www.cnblogs.com/xinzhuangzi/p/4100551.html
Copyright © 2020-2023  润新知