[转载]每天学一点Flex(1):DataGrid组件分页

本文介绍如何在Flex中使用DataGrid实现XML数据分页显示的方法。通过自定义分页类,结合按钮点击事件更新显示内容,实现了类似真实分页的效果。此方法适用于大量数据展示场景,如排行榜和搜索结果等。
  原文地址: http://blog.youkuaiyun.com/hero82748274/archive/2009/12/ 29/5101632.aspx
  有一段时间没有接触flex ,有点不怎会用flex。还好最近弄了一下分页的东西,对xml进行分页还是挺管用。借用之前封装好的类居然解决很久之前的问题。对DataGrid 的组件分页,可以通过对XML进行一些处理,看起来真的分页了。实际上只是一种错觉。
  首先先准备一个数据源XML。大概以一个员工作姓名 年龄和性别 为数据源。这个XML 包含很多条员工的信息。下面只是显示2条,可以自己进行充。
  view plaincopy to clipboardprint?
  
  
  
  jim
  12
  man
  
  
  lili
   23
   girl
  
  
  
  
  
  jim
  12
  man
  
  
  lili
   23
   girl
  
  
  //用于计算的分页类。包含分页的方式,当前页,显示分页数的。
  view plaincopy to clipboardprint?
  package com.web
  {
  //分页类
  public class Page
  {
  private var max:int;
  private var pagenum:int;
  private var currentPages:int;
  public function Page()
  {
  }
  //设置分页项数
  public function set MaxRow(max:int):void
  {
  this.max=max;
  }
  //获取分页项数
  public function get MaxRow():int
  {
  return max;
  }
  public function set currentPage(value:int):void
  {
  this.currentPages=value;
  }
  public function get currentPage():int
  {
  return currentPages;
  }
  //获取总的分页数,利用求余的方式判断是不是整页
  public function getPageNumber(total:int):int
  {
  if (total%MaxRow==0)
  {
  pagenum=total/MaxRow;
  } else
  {
  pagenum=int(total/MaxRow)+1;
  }
  return pagenum;
  }
  public function get TotalPage():int
  {
  return pagenum;
  }
  //显示页码
  public function getPage():String
  {
  var str:String=(currentPage+1)+"/"+TotalPage;
  return str;
  }
  }
  }
  package com.web
  {
  //分页类
  public class Page
  {
  private var max:int;
  private var pagenum:int;
  private var currentPages:int;
  public function Page()
  {
  }
  //设置分页项数
  public function set MaxRow(max:int):void
  {
  this.max=max;
  }
  //获取分页项数
  public function get MaxRow():int
  {
  return max;
  }
  public function set currentPage(value:int):void
  {
  this.currentPages=value;
  }
  public function get currentPage():int
  {
  return currentPages;
  }
  //获取总的分页数,利用求余的方式判断是不是整页
  public function getPageNumber(total:int):int
  {
  if (total%MaxRow==0)
  {
  pagenum=total/MaxRow;
  } else
  {
  pagenum=int(total/MaxRow)+1;
  }
  return pagenum;
  }
  public function get TotalPage():int
  {
  return pagenum;
  }
  //显示页码
  public function getPage():String
  {
  var str:String=(currentPage+1)+"/"+TotalPage;
  return str;
  }
  }
  }
  下面为MXML。
  view plaincopy to clipboardprint?
  
  
  
  tempxml.length() ? tempxml.length() :page.MaxRow*(count+1);
  for (var i:int=page.MaxRow*count; i
  
  
  width="496.5105" height="343" layout="absolute">
  width="476.5" height="263">
  
  
  
  
  
  
  
  width="77" click="onNext(event)"/>
  width="49"/>
  
  
  
  
  
  tempxml.length() ? tempxml.length() :page.MaxRow*(count+1);
  for (var i:int=page.MaxRow*count; i
  
  
  width="496.5105" height="343" layout="absolute">
  width="476.5" height="263">
  
  
  
  
  
  
  
  width="77" click="onNext(event)"/>
  width="49"/>
  
  
  关键地方操作:采用了按钮点击次数来确定翻页。包括上一页,和下一页两个方法
  private function onPreview(event:MouseEvent):void
  private function onNext(event:MouseEvent):void
  这种方式通过count点击的次数来确定翻了第二页。默认是0,其实就是第一页。这个部分可以自行修改。这里只是采用count 变量记录点了多少次数。
  关键一个地方:在于对XML 节点进行选择,通过其他方式保存。这里可以是数组,或者ArrayCollection。两种方式自由选择。
  每次读取的只是XML的一个片段,这个片段的节点用集合或者数组进行记录保存。然后绑定在DataGrid 地方,因此可以看到,其实每次DataGrid 显示的数据仅仅是XML的一个片段。至于这部分存取的内存的XML数据,依旧会占用内存的一部分,因此这部分损失依旧要计算出来。只是在使用策略上,不需要一下子显示到组件当中。
  view plaincopy to clipboardprint?
  //显示人数
  private function showWorker():void
  {
  TempList.removeAll();
  temp=page.MaxRow*(count+1)>tempxml.length() ? tempxml.length() :page.MaxRow*(count+1);
  for (var i:int=page.MaxRow*count; itempxml.length() ? tempxml.length() :page.MaxRow*(count+1);
  for (var i:int=page.MaxRow*count; i<temp; i++)
  {
  TempList.addItem(tempxml[i]);
  }
  trace(TempList);
  currentPage=page.getPage();
  }
  扩展:
  通过DataGrip进行分页处理,可以处理很多的事情,例如有一些webgame的里面会进行对玩家的排名的这部分排名可以采用分页的技术来进行。还通过进行搜索的方式来进行集合。因此这部分的内容在开发当中会经常遇到的一些问题。
  本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/hero82748274/archive/2009/12/ 29/5101632.aspx
多角色体系 支持管理员、商家、消费者三种角色,权限分级管控: 管理员:负责平台整体配置、用户审核、数据监控等全局操作。 商家:管理店铺信息、发布商品、处理订单、回复评价等。 消费者:浏览商品、加入购物车、下单支付、评价商品等。 实现用户注册(手机号 / 邮箱验证)、登录(支持密码 / 验证码 / 第三方登录)、个人信息管理(头像、收货地址、密码修改)。 权限精细化控制 商家仅能管理自家店铺及商品,消费者仅能查看和购买商品,管理员拥有全平台数据访问权限。 二、商品管理功能 商品信息维护 商家可发布商品:填写名称、分类(如服饰、电子产品)、子类别(如手机、笔记本)、规格(尺寸、颜色、型号)、价格、库存、详情描述(图文)、物流信息(运费、发货地)等。 支持商品上下架、库存调整、信息编辑,系统自动记录商品状态变更日志。 商品分类与搜索 按多级分类展示商品(如 “数码产品→手机→智能手机”),支持自定义分类体系。 提供智能搜索功能:按关键词(名称、品牌)搜索,支持模糊匹配和搜索联想;结合用户浏览历史对搜索结果排序(优先展示高相关度商品)。 商品推荐 基于用户浏览、收藏、购买记录,推荐相似商品(如 “浏览过该商品的用户还买了…”)。 首页展示热门商品(销量 TOP10)、新品上架、限时折扣等推荐列表。 三、订单与交易管理 购物车与下单 消费者可将商品加入购物车,支持修改数量、选择规格、移除商品,系统自动计算总价(含运费、折扣)。 下单流程:确认收货地址→选择支付方式(在线支付、货到付款)→提交订单→系统生成唯一订单号。 订单处理流程 订单状态跟踪:待支付→已支付→商家发货→物流运输→消费者收货→订单完成,各状态变更实时通知用户。 商家端功能:查看新订单提醒、确认发货(填写物流单号)、处理退款申请(需审核理由)。 消费者端功能:查看订单详情、追踪物流、申请退款 / 退货、确认收货。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值