Flex中datagrid的分页

PagingBar.mxml

<?xml version="1.0" encoding="utf-8"?>
<mx:HBox xmlns:mx="http://www.adobe.com/2006/mxml" backgroundColor="white">
 <mx:Script>
  <![CDATA[
                  import mx.collections.ArrayCollection;
                  import mx.events.ItemClickEvent;
                  import flash.events.KeyboardEvent;
                  import mx.controls.DataGrid;
                  import mx.validators.NumberValidator;

           [Bindable]
      [Embed(source='assets/first.jpg')]
      private var firstIcon:Class;     
      private var firstPage:uint;
     
           [Bindable]
      [Embed(source='assets/pre.jpg')]
      private var preIcon:Class;
      private var prePage:uint;
   
           [Bindable]
      [Embed(source='assets/next.jpg')]
      private var nextIcon:Class;
      private var nextPage:uint;

           [Bindable]
      [Embed(source='assets/last.jpg')]
      private var lastIcon:Class;
      private var lastPage:uint;
                          
                  //页码条数据,绑定
                  [Bindable]
                  private var nav:ArrayCollection = new ArrayCollection();
                 
                  //默认起始页码,第1页
                  private var currentPageIndex:uint = 0;
                 
                  //是否已初始化
                  private var isInit:Boolean=true;                 
       
        //总页数
      private var totalPages:uint = 0;
     
      //是否重绘页码条,当使用服务端分页时使用
      private var isCreateNavBar:Boolean = true;
            
      /************************************************************/
     
                  //显示到Grid的数据
                  [Bindable]
                  public var viewData:ArrayCollection=null;
                 
                  //所有的数据
                  public var orgData:ArrayCollection=null;
                 
                  //每页记录数下拉框
                  public var pageSizeDropDownListData:ArrayCollection=null;
                 
                  // 每页记录数
                  public var pageSize:uint = 5;
                    
                  // 页码条上显示页码的个数
                  public var navSize:uint = 5;
                 
                  //记录总数,调用服务端发页时使用
                  public var totalRecord:int=0;
                 
                  //分页函数
                  public var pagingFunction:Function=null;
                 
                  //分页条对应的Grid
                  public var dataGrid:DataGrid=null;
                 
                  /***************************************************************/
                 
                  public function dataBind(isServerSide:Boolean=false):void{
            //是否初始化
         if(isInit){
       if(pageSizeDropDownListData==null){
        pageSizeDropDownListData = new ArrayCollection();
        pageSizeDropDownListData.addItem({label:5,data:5});
        pageSizeDropDownListData.addItem({label:10,data:10});
        pageSizeDropDownListData.addItem({label:20,data:20});
        pageSizeDropDownListData.addItem({label:30,data:30});            
       }
       pageSizeComobox.dataProvider=pageSizeDropDownListData;
       isInit=false;
         }
         //                                  
         refreshDataProvider(currentPageIndex,isCreateNavBar,pageSize,isServerSide);
                  }
                 
                 
                 
                  /**
     * 构建页码条
                   * pages:总页数
                   * pageIndex:当前页(注意,从0开始)
                   *
                   */
                  private function createNavBar(pageIndex:uint = 0):void{
                      nav.removeAll();
                      //向前图标操作,first,Pre
                      if( pageIndex > 1 ){
                            firstPage=0;
                            firstNavBtn.visible=true;
                            //
                            var intLFive:int = pageIndex-navSize; // calculate start of last 5;
                            //
                            prePage=intLFive;
                            preNavBtn.visible=true;
                      }
                      else{
                         firstNavBtn.visible=false;
                         preNavBtn.visible=false;
                      }
                      //页码条       
                      for( var x:uint = 0; x < navSize; x++){
                            var pg:uint = x + pageIndex;
                            nav.addItem({label: pg + 1,data: pg});
       // 
       var pgg:uint = pg+1;
       if(pgg>=totalPages){ //搜索到最后一个页码,停止添加到navbar
        x=navSize;
       }
                      }
       //计算最后一组页码条中第一个页码的页码编号
       var lastpage:Number = 0;
       for( var y:uint = navSize; y <= totalPages-1;y = y + navSize ){ //lets calculate the lastpage button
         if(y+5 > navSize){
          lastpage = y;
         }
       }      
       //向后图标
                      if( pg < totalPages - 1 ){
                            nextPage=pg + 1;
                            nextNavBtn.visible=true;
                            lastPage=lastpage;
                        lastNavBtn.visible=true;
                      }
                      else{                             
                        nextNavBtn.visible=false;
                        lastNavBtn.visible=false;
                      }
                  }
                 
                  /**
                  * 页码按钮按下(页码条点击)
                  */
                  private function navigatePage(event:ItemClickEvent):void
                  {
                        refreshDataProvider(event.item.data,false);  
                  }
                 
                  /**
                  * 页码按钮按下,first,pre,next,last
                  */
                  private function navigateButtonClick(pageString:String):void{
                    var pageIndex:uint=0;
                    switch(pageString){
                     case "firstPage":
                      pageIndex=firstPage;
                      break;
                     case "prePage":
                      pageIndex=prePage;
                      break;
                     case "nextPage":
                      pageIndex=nextPage;
                      break;
                     default: //lastPage
                      pageIndex=lastPage;
                    }
                    //
                    refreshDataProvider(pageIndex);
                  }
                 
                  /**
                  * 更新数据源,更新表格显示数据
                  */
                  private function refreshDataProvider(pageIndex:uint,isCreateNavBar:Boolean=true,pageSize:uint=0,resultReturn:Boolean=false):void{
                   //分页函数
                   if(dataGrid==null) return;
                   currentPageIndex=pageIndex;
             if(pageSize==0){
               pageSize=this.pageSize; 
             }else{
               this.pageSize=pageSize;
              if(!resultReturn) totalPages = Math.ceil(orgData.length/pageSize);
             }                  
                   if(!resultReturn){                                                            
                     if(this.pagingFunction!=null){
         pagingFunction(pageIndex,pageSize);
         this.isCreateNavBar=isCreateNavBar; 
                     }
                     else{
                       viewData = new ArrayCollection( orgData.source.slice((pageIndex * pageSize),(pageIndex * pageSize) + pageSize) );                   
                       dataGrid.dataProvider=viewData;
                       pageNumber.text=(pageIndex+1).toString();
                       
                      totalRecordLabel.text = '总记录数:' + orgData.length.toString();                                        
                     }
                   }
                   else{
                     dataGrid.dataProvider=orgData;
                     totalPages = Math.ceil(totalRecord/pageSize);
                     pageNumber.text=(pageIndex+1).toString();
                     totalRecordLabel.text = '总记录数:' + totalRecord.toString()   
                   }
                   totalPagesLabel.text = '总页数:' + totalPages;
                   if(isCreateNavBar) createNavBar(pageIndex);
                  }
                  //
                  /**
                  * 每页记录数变更(下拉框选择)
                  */
                  private function pageSizeSelectChange():void{
                    refreshDataProvider(0,true,uint(pageSizeComobox.value));
                  }               
                  /**
                  * 页码变更(直接输入)
                  */
                  private function pageIndexInsertChange(event:Event):void{
                    var keyboardEvent:KeyboardEvent=event as KeyboardEvent;
                    if(keyboardEvent!=null&&keyboardEvent.keyCode== Keyboard.ENTER){
                     var pageIndex:uint=uint(pageNumber.text)-1;
                     if(pageIndex>0&&pageIndex<totalPages&&pageIndex!=currentPageIndex){
                       refreshDataProvider(pageIndex);
                      }
                      else{                    
                       pageNumber.text = (currentPageIndex+1).toString();
                      }
                    }
                  }    
                  /**
                  * 查看所有
                  */
                  private function viewAll():void{
                    var tempTotalRecord:uint=0;              
      if(pagingFunction!=null) tempTotalRecord=totalRecord;
      else tempTotalRecord=orgData.length;
      //
      pageSizeComobox.text=tempTotalRecord.toString();
      pageSizeComobox.selectedIndex=-1;
      refreshDataProvider(0,true,tempTotalRecord);
                  }
  ]]>
 </mx:Script>
 <mx:HBox paddingTop="8">
  <mx:Button id="firstNavBtn" icon="{firstIcon}" width="10" height="10" click="navigateButtonClick('firstPage');" />
     <mx:Button id="preNavBtn" icon="{preIcon}" width="7" height="10" click="navigateButtonClick('prePage');"/>
 </mx:HBox>
 <mx:LinkBar id="pageNav" itemClick="navigatePage(event)" dataProvider="{nav}"/>
 <mx:HBox paddingTop="8">
     <mx:Button id="nextNavBtn" icon="{nextIcon}" width="7" height="10" click="navigateButtonClick('nextPage');"/>
     <mx:Button id="lastNavBtn" icon="{lastIcon}" width="10" height="10" click="navigateButtonClick('lastPage');"/>
 </mx:HBox>
 <mx:VRule height="25"/>
 <mx:Label paddingTop="3" id="totalPagesLabel" text=""/>
 <mx:Label paddingTop="3" id="totalRecordLabel" text=""/>
 <mx:Label paddingTop="3" text="每页记录:"/>
 <mx:ComboBox id="pageSizeComobox" cornerRadius="0" paddingLeft="0" fontWeight="normal" width="50" arrowButtonWidth="10" change="pageSizeSelectChange()"/>
 <mx:Label paddingTop="3" text="页码:"/>
 <mx:TextInput id="pageNumber" width="40" keyDown="pageIndexInsertChange(event);"/>
 <mx:LinkButton id="viewAllLinkBtn" label="查看所有" click="viewAll();"/>            
</mx:HBox>  

 

Test.mxml

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:control="com.control.*" creationComplete="creationCompleteHandle()">
 <mx:Style>
 Application{
  fontSize:12;
 }
 </mx:Style>
 <mx:Script>
  <![CDATA[
   import mx.collections.ArrayCollection;
   import com.services.StorageFactory;
   import be.wellconsidered.services.events.OperationEvent;

   private var pageIndex:int=0;
    
   private var pageSize:int=5;
    
   private function creationCompleteHandle():void{
    var orgData:ArrayCollection = new ArrayCollection();
             for( var x:uint = 1; x <= 555; x++ )
             {
              var obj:Object = new Object();
              obj.ID = "id " + x.toString();
              obj.Code="order "+x;
              obj.Total=x*1000;
              obj.Customer= "customer "+x;
              obj.Register = "employee";
              obj.Memo="memo "+x;              
              obj.State="auditing state";              
              orgData.addItem(obj);
             }
             clientPagingBar1.dataGrid=DataGrid1;
             clientPagingBar1.orgData=orgData;
             clientPagingBar1.dataBind();
             //
             serverPagingBar1.dataGrid=DataGrid2;
             serverPagingBar1.pagingFunction=pagingFunction;
             new StorageFactory().getOrderPaged(onResult,pageIndex,pageSize);    
   }
   
         private function pagingFunction(pageIndex:int,pageSize:int):void{
              new StorageFactory().getOrderPaged(onResult,pageIndex,pageSize);
         }
        
         public function onResult(e:OperationEvent):void
    {    
     trace(e.data);
     var xmlObj:XML=new XML(e.data);
     var dataList:ArrayCollection = new ArrayCollection();
     var item:XML;
     for each(item in xmlObj.OrderList.Order){
      dataList.addItem(item);   
     }
     serverPagingBar1.orgData=dataList;
     serverPagingBar1.totalRecord=int(xmlObj.TotalCount);
     serverPagingBar1.dataBind(true);     
    } 
  ]]>
 </mx:Script>
 <mx:VBox>  
  <mx:Label text="客户端分页" />
  <mx:Canvas backgroundColor="white">
      <mx:VBox width="100%" height="100%" paddingBottom="10" paddingLeft="10" paddingRight="10" paddingTop="10" verticalScrollPolicy="off" horizontalScrollPolicy="off">
       <mx:DataGrid id="DataGrid1" verticalScrollPolicy="on" horizontalScrollPolicy="off">
     <mx:columns>
       <mx:DataGridColumn headerText="订单ID" dataField="ID" />
       <mx:DataGridColumn headerText="订单编码" dataField="Code" />
       <mx:DataGridColumn headerText="金额" dataField="Total" />
       <mx:DataGridColumn headerText="客户" dataField="Customer" />
       <mx:DataGridColumn headerText="销售员" dataField="Register" />
       <mx:DataGridColumn headerText="备注说明" dataField="Memo" />
       <mx:DataGridColumn headerText="状态" dataField="State" />       
        </mx:columns>
       </mx:DataGrid>
    <control:PagingBar id="clientPagingBar1" />
        </mx:VBox>
  </mx:Canvas>
  <mx:Label text="服务端分页" />
  <mx:Canvas backgroundColor="white">
      <mx:VBox width="100%" height="100%" paddingBottom="10" paddingLeft="10" paddingRight="10" paddingTop="10" verticalScrollPolicy="off" horizontalScrollPolicy="off">
       <mx:DataGrid id="DataGrid2" verticalScrollPolicy="on" horizontalScrollPolicy="off">
     <mx:columns>
       <mx:DataGridColumn headerText="订单ID" dataField="ID" />
       <mx:DataGridColumn headerText="订单编码" dataField="Code" />
       <mx:DataGridColumn headerText="金额" dataField="Total" />
       <mx:DataGridColumn headerText="客户" dataField="Customer" />
       <mx:DataGridColumn headerText="销售员" dataField="Register" />
       <mx:DataGridColumn headerText="备注说明" dataField="Memo" />
       <mx:DataGridColumn headerText="状态" dataField="State" />       
        </mx:columns>
       </mx:DataGrid>
    <control:PagingBar id="serverPagingBar1" />
        </mx:VBox>
  </mx:Canvas>
 </mx:VBox>
</mx:Application>

基于数据挖掘的音乐推荐系统设计与实现 需要一个代码说明,不需要论文 采用python语言,django框架,mysql数据库开发 编程环境:pycharm,mysql8.0 系统分为前台+后台模式开发 网站前台: 用户注册, 登录 搜索音乐,音乐欣赏(可以在线进行播放) 用户登陆时选择相关感兴趣的音乐风格 音乐收藏 音乐推荐算法:(重点) 本课题需要大量用户行为(如播放记录、收藏列表)、音乐特征(如音频特征、歌曲元数据)等数据 (1)根据用户之间相似性或关联性,给一个用户推荐与其相似或有关联的其他用户所感兴趣的音乐; (2)根据音乐之间的相似性或关联性,给一个用户推荐与其感兴趣的音乐相似或有关联的其他音乐。 基于用户的推荐和基于物品的推荐 其中基于用户的推荐是基于用户的相似度找出相似相似用户,然后向目标用户推荐其相似用户喜欢的东西(和你类似的人也喜欢**东西); 而基于物品的推荐是基于物品的相似度找出相似的物品做推荐(喜欢该音乐的人还喜欢了**音乐); 管理员 管理员信息管理 注册用户管理,审核 音乐爬虫(爬虫方式爬取网站音乐数据) 音乐信息管理(上传歌曲MP3,以便前台播放) 音乐收藏管理 用户 用户资料修改 我的音乐收藏 完整前后端源码,部署后可正常运行! 环境说明 开发语言:python后端 python版本:3.7 数据库:mysql 5.7+ 数据库工具:Navicat11+ 开发软件:pycharm
MPU6050是一款广泛应用在无人机、机器人和运动设备中的六轴姿态传感器,它集成了三轴陀螺仪和三轴加速度计。这款传感器能够实时监测并提供设备的角速度和线性加速度数据,对于理解物体的动态运动状态至关重要。在Arduino平台上,通过特定的库文件可以方便地与MPU6050进行通信,获取并解析传感器数据。 `MPU6050.cpp`和`MPU6050.h`是Arduino库的关键组成部分。`MPU6050.h`是头文件,包含了定义传感器接口和函数声明。它定义了类`MPU6050`,该类包含了初始化传感器、读取数据等方法。例如,`begin()`函数用于设置传感器的工作模式和I2C地址,`getAcceleration()`和`getGyroscope()`则分别用于获取加速度和角速度数据。 在Arduino项目中,首先需要包含`MPU6050.h`头文件,然后创建`MPU6050`对象,并调用`begin()`函数初始化传感器。之后,可以通过循环调用`getAcceleration()`和`getGyroscope()`来不断更新传感器读数。为了处理这些原始数据,通常还需要进行校准和滤波,以消除噪声和漂移。 I2C通信协议是MPU6050与Arduino交互的基础,它是一种低引脚数的串行通信协议,允许多个设备共享一对数据线。Arduino板上的Wire库提供了I2C通信的底层支持,使得用户无需深入了解通信细节,就能方便地与MPU6050交互。 MPU6050传感器的数据包括加速度(X、Y、Z轴)和角速度(同样为X、Y、Z轴)。加速度数据可以用来计算物体的静态位置和动态运动,而角速度数据则能反映物体转动的速度。结合这两个数据,可以进一步计算出物体的姿态(如角度和角速度变化)。 在嵌入式开发领域,特别是使用STM32微控制器时,也可以找到类似的库来驱动MPU6050。STM32通常具有更强大的处理能力和更多的GPIO口,可以实现更复杂的控制算法。然而,基本的传感器操作流程和数据处理原理与Arduino平台相似。 在实际应用中,除了基本的传感器读取,还可能涉及到温度补偿、低功耗模式设置、DMP(数字运动处理器)功能的利用等高级特性。DMP可以帮助处理传感器数据,实现更高级的运动估计,减轻主控制器的计算负担。 MPU6050是一个强大的六轴传感器,广泛应用于各种需要实时运动追踪的项目中。通过 Arduino 或 STM32 的库文件,开发者可以轻松地与传感器交互,获取并处理数据,实现各种创新应用。博客和其他开源资源是学习和解决问题的重要途径,通过这些资源,开发者可以获得关于MPU6050的详细信息和实践指南
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值