- 浏览: 10812 次
- 性别:
- 来自: 云南
最近访客 更多访客>>
最新评论
-
Lianzhong.Huang:
peterwei 写道怎么不用tfs呀。 O(∩_∩)O~ ...
我是这么做项目管理的 -
peterwei:
怎么不用tfs呀。
我是这么做项目管理的
开发时经常遇到用一个DataGrid分页显示数据的情况,然而Flex本身没有提供分页控件,给开发带来了不便。这里将自己开发时做的一个分页控件摆出来供刚入门的朋友参考。O(∩_∩)O~
采用BlazeDS与Java端通信
1. 一个Vo对象Page存放分页信息,以及相对应的Java端的Page对象
2. 一个很简单的自定义事件PageEvent
3. 调用。通过RemoteObject调用服务器的分页查询方法(返回值为Page对象)
一、JAVA端
1、Page对象 (从SpringSide那借来的)
/** * 分页对象. 包含当前页数据及分页信息如总记录数. */ public class Page { /** * 默认每页记录数 */ private static final int DEFAULT_PAGE_SIZE = 20; /** * 每页的记录数 */ private int pageSize = DEFAULT_PAGE_SIZE; /** * 当前页第一条数据在List中的位置,从0开始 */ private long start = 0; /** * 总记录数 */ private long totalCount = 0; /** * 总页数 */ @SuppressWarnings("unused") private long totalPageCount = 0; /** * 当前页数 */ @SuppressWarnings("unused") private long currentPageNo; /** * 查询结果 */ private List resultList; }
2、查询方法接口
/** * 分页查询 * @param condition 查询条件 (根据需求来定) * @param pageNo * @param pageSize * @return */ public Page pagedQuery(String condition, int pageNo, int pageSize);
二、Flex端
1、Page对象(通过工具类生成)
package lzh.demo.pagebar.model { import mx.collections.ArrayCollection; [RemoteClass(alias="lzh.demo.pagebar.model.Page")] [Bindable] public class Page { /** * 默认每页记录数 */ public static const DEFAULT_PAGE_SIZE:int = 20; /** * 每页的记录数 */ public var pageSize:int = DEFAULT_PAGE_SIZE; /** * 当前页第一条数据在List中的位置,从0开始 */ public var start:int; /** * 总记录数 */ public var totalCount:int; /** * 总页数 */ public var totalPageCount:int; /** * 当前页数 */ public var currentPageNo:int = 1; /** * 查询结果 */ public var resultList:ArrayCollection; public function Page() { } public static function buildPage(item:Object) : Page{ if(null==item) return null; var page:Page = new Page(); page.pageSize = item.pageSize; page.start = item.start; page.data = item.data; page.totalCount = item.totalCount; page.totalPageCount = item.totalPageCount; page.currentPageNo = item.currentPageNo; page.resultList = item.resultList; return page; } } }
2、PageEvent
package lzh.demo.pagebar.event { import flash.events.Event; import lzh.demo.pagebar.model.Page; public class PageEvent extends Event { public var page:Page; public function PageEvent(page:Page, type:String) { super(type); this.page = page; } public override function clone():Event{ return new PageEvent(page, type); } } }
3、PageBar
<?xml version="1.0" encoding="utf-8"?> <mx:HBox xmlns:mx="http://www.adobe.com/2006/mxml" verticalAlign="bottom" creationComplete="init()" horizontalGap="4"> <mx:Metadata> [Event(name="goPage",type="lzh.demo.pagebar.event.PageEvent")] </mx:Metadata> <mx:Script> <![CDATA[ import lzh.demo.pagebar.event.PageEvent; import lzh.demo.pagebar.model.Page; import mx.events.ListEvent; import mx.events.NumericStepperEvent; private var _page:Page; [Bindable] public function set page(page:Page):void{ _page = page; configPageBar(); } public function get page():Page{ return _page; } [Bindable] /** * 在HorizontalList中显示的页码 */ public var pageNumbers:Array=[]; /** * HorizontalList中显示的最大数字 */ private static const SIZE:int = 10; /** * HorizontalList左边显示的数量 */ private static const LEFT_SIZE:int = 2; private function init():void{ if(null==_page) { _page = new Page(); } configPageBar(); } /** * 配置PageBar */ private function configPageBar():void{ configPageNumbers(); hbFirst.addChild(lbtnFirst); hbPrev.addChild(btnPrev); hbNext.addChild(btnNext); hbLast.addChild(lbtnLast); // 左边的显示:首页\上一页 if (1==_page.currentPageNo){ hbFirst.removeChild(lbtnFirst); hbPrev.removeChild(btnPrev); } else if((1<_page.currentPageNo) && (_page.currentPageNo<=4)){ hbFirst.removeChild(lbtnFirst); } // 右边的显示:下一页\尾页 if (_page.totalPageCount<=_page.currentPageNo){ hbLast.removeChild(lbtnLast); hbNext.removeChild(btnNext); } else if(pageNumbers.indexOf(_page.totalPageCount)>-1){ hbLast.removeChild(lbtnLast); } hListNumbers.columnCount = pageNumbers.length; } /** * 配置显示的可选页码 */ private function configPageNumbers():void{ pageNumbers = []; if (_page.totalPageCount<1){ // 总页数为0 return; } var i:int=0; if (_page.currentPageNo<4 ){ for(i=1; i<=_page.currentPageNo; i++){ //将<=currentPageNo的页码加入 pageNumbers.push(i); } } else { for(i=LEFT_SIZE; i>=0; i--){ pageNumbers.push(_page.currentPageNo-i); } } // 从currentPage后起,分别加入,总数不超过10 for(i=1; pageNumbers.length<SIZE && (_page.currentPageNo+i)<=_page.totalPageCount; i++){ pageNumbers.push(_page.currentPageNo+i); } if((pageNumbers.length<SIZE) && pageNumbers.indexOf(_page.totalPageCount)>-1 && (pageNumbers.indexOf(1)==-1)){ pageNumbers = []; i =((_page.totalPageCount<SIZE)?_page.totalPageCount:SIZE) - 1; for ( ; i>=0; i--){ pageNumbers.push(_page.totalPageCount-i); } } hListNumbers.selectedItem = _page.currentPageNo; } protected function btnPrev_clickHandler(event:MouseEvent):void { goPage((hListNumbers.selectedItem as uint) - 1); } protected function btnNext_clickHandler(event:MouseEvent):void { goPage((hListNumbers.selectedItem as uint) + 1); } /** * 向上分发事件,一般情况下,需要与服务器端通信 */ private function goPage(pageNo:uint):void{ _page.currentPageNo = pageNo; this.dispatchEvent(new PageEvent(_page, "goPage")); } protected function hListNumbers_changeHandler(event:ListEvent):void { goPage(hListNumbers.selectedItem as uint); } protected function lbtnFirst_clickHandler(event:MouseEvent):void { goPage(1); } protected function lbtnLast_clickHandler(event:MouseEvent):void { goPage(_page.totalPageCount); } protected function pageSize_changeHandler(event:NumericStepperEvent):void { _page.totalPageCount = _page.totalCount / pageSize.value; _page.totalPageCount += ((_page.totalCount % pageSize.value)>0)?1:0; if (_page.totalPageCount>0){ _page.currentPageNo = 1; goPage(_page.currentPageNo); } } protected function btnGo_clickHandler(event:MouseEvent):void { var pageNo:int = (Number)(targetPageNo.text); if (0==pageNo) { targetPageNo.text = 1 + ""; } if(pageNo<=0){ targetPageNo.text = 1 + ""; } if (pageNo>_page.totalPageCount){ targetPageNo.text = _page.totalPageCount + ""; } pageNo = (Number)(targetPageNo.text); goPage(pageNo); } ]]> </mx:Script> <mx:Text text="{page.totalCount+'条记录'}" /> <mx:Text text="每页"/> <mx:NumericStepper id="pageSize" minimum="10" stepSize="5" maximum="5000" value="20" change="pageSize_changeHandler(event)"/> <mx:HBox id="hbFirst"> <mx:LinkButton id="lbtnFirst" label="1..." fontWeight="normal" click="lbtnFirst_clickHandler(event)"/> </mx:HBox> <mx:HBox id="hbPrev"> <mx:Button id="btnPrev" icon="@Embed(source='/assets/prev_page.gif')" enabled="{1!=hListNumbers.selectedItem}" toolTip="上一页" click="btnPrev_clickHandler(event)" cornerRadius="20" alpha="1.0" borderColor="#FDFDFD" width="30"/> </mx:HBox> <mx:HorizontalList id="hListNumbers" dataProvider="{pageNumbers}" columnCount="10" columnWidth="22" borderStyle="none" backgroundColor="#FFFFFF" height="23" change="hListNumbers_changeHandler(event)"> </mx:HorizontalList> <mx:HBox id="hbNext"> <mx:Button id="btnNext" icon="@Embed(source='assets/next_page.gif')" enabled="{page.totalPageCount!=hListNumbers.selectedItem}" toolTip="下一页" click="btnNext_clickHandler(event)" cornerRadius="20" borderColor="#F9FBFC" width="30"/> </mx:HBox> <mx:HBox id="hbLast"> <mx:LinkButton id="lbtnLast" label="{'...'+page.totalPageCount}" fontWeight="normal" click="lbtnLast_clickHandler(event)"/> </mx:HBox> <mx:TextInput maxChars="3" restrict="0-9" textAlign="right" id="targetPageNo"/> <mx:Button label="Go" cornerRadius="10" width="50" id="btnGo" click="btnGo_clickHandler(event)"/> </mx:HBox>
4、调用
<components:PageBar id="pageBar" goPage="pagedQuery()"/> /** * 调用服务器端方法 */ private function pagedQuery():void{ itemManager.pagedQuery( condition.text, pageBar.page.currentPageNo, pageBar.pageSize.value); } } /** * 相应分页查询方法 */ private function onPagedQuery(event:ResultEvent):void{ pageBar.page = Page.buildPage(event.result); items = pageBar.page.resultList; // items为DataGrid的dataProvider }
发表评论
-
仿照Flexstroe3写的一个员工管理应用 (四)
2011-04-10 10:21 593本篇内容为创建员工缩略图以及员工详细信息,如图。 ... -
仿照Flexstroe3写的一个员工管理应用 (三)
2011-04-04 12:14 557本篇的主要包括两部分内容。 1. 服务器端的文件结构 ... -
仿照Flexstroe3写的一个员工管理应用 (二)
2011-04-03 15:30 631本篇的内容是搭建 ... -
仿照Flexstroe3写的一个员工管理应用 (一)
2011-04-03 13:42 676一开始接触Flexstroe便被它的华丽给吸引了, ... -
Flex加载module时给出加载提示
2011-04-03 11:38 1323ModuleLoader在加载模块时会消耗一段时间 ... -
Flex自定义控件——数值输入框
2010-12-04 22:43 1905在用Flex开发时,经常遇到TextInput只允许输入数值的 ...
相关推荐
DevExpress和Telerik是两个知名的UI控件库,它们提供了丰富的分页控件。例如,DevExpress的ASPxGridView控件和Telerik的RadGrid控件都支持强大的分页功能。这些控件不仅提供了基本的分页,还支持自定义样式、分页...
分页条控件,可以设置分页条的长度,背景色,对齐方式等 使用方式: 1,将分页条的BindMethod属性设置为你绑定数据的方法的名称,这里为BindRepeater, 2,例子代码 public void BindRepeater() { this....
在这个自定义控件中,你需要实现页面的绘制逻辑,比如圆点的大小、颜色、位置等,并根据页面状态动态更新这些属性。 2. 事件监听:添加对触摸事件的支持,使得用户可以通过滑动或点击进行页面切换。这可能涉及到...
用户可以根据需要调整分页插件的配置,如自定义样式、添加额外的分页选项等,以满足特定项目的需求。 总结来说,JS+jQuery分页插件通过利用jQuery库的强大功能,结合CSS样式表,可以轻松实现网页的高效分页功能,...
在本文中,我们将探讨如何基于jQuery实现一个简单的分页控件。分页控件是网页应用中常见的功能,用于管理大量的数据,使用户能够按页浏览而不是一次性加载所有内容。以下是一个逐步的实现过程。 首先,分页控件的...
6. **PageBar**: 分页栏,通常包含前后翻页按钮、跳转至指定页等元素。 - 示例代码中使用了`MainPageBar.jsp`作为分页栏组件。 #### 代码实现分析 - **HTML表格构建**: - 使用`while`循环遍历`nStartLine`到`...
本文详细介绍了如何在Zend Framework中实现和使用一个高效的分页类。Zend Framework是PHP语言开发的一个开源框架,其设计宗旨是推动Web 2.0和AJAX应用的快速发展。而分页功能是Web开发中经常用到的一个重要功能,它...
在本实例中,我们讨论的是如何使用Vue分页组件`table-pagebar`,该组件是基于Bootstrap风格设计的,能够方便地实现数据的分页展示。 `table-pagebar`组件的设计目的是为了帮助开发者更轻松地在Vue项目中添加分页...
文章还提到了另一个自定义标签PageBar,它负责生成分页导航条。这个类包含分页相关的属性,比如当前页码(PageNum)、每页显示的项目数(PageSize)以及总页数(PageCount)。在Render方法中,它根据这些属性动态...
`displayMsg`用于自定义显示消息,`emptyMsg`则为没有记录时的提示信息。 ##### 7. 初始化GridPanel 最后初始化`GridPanel`,设置其宽度、高度等属性,并将其与存储器、列模型以及分页工具栏绑定起来: ```...
SimplePagebar一个使用 TypeScript 开发的简单分页条,支持首页、末页、上一页、下一页、自定义页码切换。使用说明只需把 release 文件夹内文件放入你的项目,引入 SimplePagebar.js文件即可。具体使用方法请看demo
1. **分页控件类设计:** 在代码中定义了一个PageBar类,这个类继承自WebControl,用于实现分页功能。它主要包括以下属性:PageIndex、PageCount和DisplayCount。其中,PageIndex代表当前页码,PageCount代表总页数...
为了自定义这个分页效果以适应不同的网站设计,你可以修改以下参数: 1. 颜色:更改边框颜色(如`border-color`)、文本颜色(如`color`)和背景颜色(如`background-color`)。 2. 尺寸:调整分页按钮的宽度、高度...
{ this.srcName= srcName; this.dstName= dstName; this.curP= 1;//默认当前页为第一页 ... this.result= {pagedata:[],pagebar:'',limit:[0,0],report:''}; this.parse();/*总纪录数*/ }
【cellpagebar】是一款基于jQuery的原创分页条插件,设计目的是为了提供高度自定义的样式和灵活的分页处理逻辑,特别适用于那些依赖AJAX进行数据交互的网站。这款插件允许开发者轻松地集成到自己的项目中,提升用户...
例如,通过修改`<a>`标签的`href`属性来设置点击跳转的地址,通过类名来控制当前页码的样式,以及通过`<li>`标签来构建分页控件等。 综上所述,JavaScript在实现列表分页功能特效中扮演着至关重要的角色。开发者...
在FlexPageBarDemo中,我们可能能看到如何利用媒体查询或者Flex布局,使分页条在桌面、平板和手机上都能良好显示。 6. **无限滚动**:除了传统的分页方式,FlexPageBar可能还实现了无限滚动功能。这种模式下,当...
`PagedBar`是一个基于JavaScript的分页控件,它允许用户轻松地在大量数据中进行导航。本篇文章将深入探讨`PagedBar`的实现原理,以及如何在项目中应用这个开源组件。 一、分页原理 分页的基本原理是将大数据集分割...