Please see ICollectionView and ListCollectionView source code.  You need to 
account for paging in your collection.  Since your collection inherits from 
ArrayCollection, the sorting is currently done as dicated by 
ListCollectionView.  Since ListCollectionView does not account for paging, your 
collection will have issues until you modify the PagedArrayCollection methods 
to account for sorting.

I'm also confused by the functions for navigation in the class: pageUp, 
pageDown, etc.  You shouldn't need those.  The beauty of collections is that 
you can encapsulate the paging and the components, such as a DataGrid, will 
function the same regardless of the collection.  By that, I mean you shouldn't 
need a next page and previous page button when you have a scroll bar.

--- In [email protected], kotha poornima <poorni_ag...@...> wrote:
>
> Hi,
> I used the pagableArrayCollection as input arraycollection to the datagrid. 
> Because of this only sorting is not working good. If we change it to 
> arraycollection its working fine. But i want pagableArraycollection for doing 
> pagination.
> PagableArrayCollection.mxml:(This file i got it from google)
> package com.cbeyond.dashboard.utils
> {
>     import mx.collections.ArrayCollection;
>     import mx.controls.Alert;
>     
>     public class PagableArrayCollection extends ArrayCollection
>     {   
>         public function PagableArrayCollection(source:Array=null){
>             super();
>             this.source = source;
>             pages=0;
>             setFilter();
>         }
>         //Private variables
>         private var _pages:Number;
>         public var _itemsPerPage:Number = 4;
>         private var _currentPage:Number = 1;
>         private var _maxIndex:Number = 24;
>         private var _minIndex:Number = 0;
>         
>         //private methods
>         private function set pages(value:Number):void{
>            if(this.source.length % this.itemsPerPage == 0){
>                _pages = this.source.length/this.itemsPerPage;
>            }
>            else{
>                _pages =  int(this.source.length/this.itemsPerPage)+1;
>            }
>         }
>         
>         public function setFilter():void{
>             this._maxIndex = (this.currentPage * this.itemsPerPage)-1;
>             this._minIndex = this._maxIndex - (this.itemsPerPage -1);
>             this.filterFunction = filterData;
>             this.refresh();
> 
>         }
>         
>         private function filterData(item:Object):Boolean{
>             return (this.getItemIndex(item) >= _minIndex && 
> this.getItemIndex(item) <= _maxIndex)
>         }
>         
>         //public methods
>         [Bindable]
>         public function get itemsPerPage():Number{
>             return _itemsPerPage;
>         }
>         
>         public function set itemsPerPage(value:Number):void{
>             _itemsPerPage = value;
>             this.pages = 0;
>             if(this.currentPage > this.pages){
>                 this.currentPage = this.pages;
>             }
>             setFilter();
>         }
>         
>          [Bindable]
>         public function get currentPage():Number{
>             return _currentPage;
>         }
>         
>         public function set currentPage(value:Number):void{
>             _currentPage = value;
>             setFilter();
>         }
>         
>         [Bindable]
>         public function get pages():Number{
>             return _pages;
>         }
>         
>         public function pageUp():void{
> 
>              if(this.currentPage < this.pages){
>                 this.currentPage += 1;
>             }
>         }
>         
>         public function pageDown():void{
>             
>             if(this.currentPage > 1){
>                 this.currentPage -= 1;
>             }
>         }
>         public function enableNextButton():Boolean{
>             //Alert.show(this.currentPage+","+this.pages);
>             if(this.currentPage == this.pages)
>                 return false;
>             else
>                 return true;
>         }
>         public function enablePrevButton():Boolean{
>             if(this.currentPage == 1 || this.currentPage == 0)
>                 return false;
>             else 
>                 return true;
>         }
>     }
> }
> 
> 
> Main.mxml
> 
> <?xml version="1.0"?>
> 
>         initialize="initDP();" width="550" height="400">
>         
>     <mx:Script>
>         <![CDATA[
>             import mx.events.DataGridEvent;
>             import mx.collections.*;
>             import com.cbeyond.dashboard.utils.PagableArrayCollection;
>             
>             // Declare storage variables and initialize the simple variables.
>             // The data provider collection.
>             private var myDPColl:PagableArrayCollection;  //change this line 
> when u r trying with ArrayCollection
>             // The Sort object used to sort the collection.
>             private var sortA:Sort;
>             // The sort fields used to determine the sort.
>              private var sortByInStock:SortField;
>              private var sortByArtist:SortField;
>              private var sortByAlbum:SortField;
>              private var sortByPrice:SortField;
>             // The data source that populates the collection.
>             private var myDP:Array = [
>                 {Artist:'Pavement', Album:'Slanted and Enchanted', 
>                     Price:11.99, InStock: true},
>                 {Artist:'Pavement', Album:'Crooked Rain, Crooked Rain', 
>                     Price:10.99, InStock: false},
>                 {Artist:'Pavement', Album:'Wowee Zowee', 
>                     Price:12.99, InStock: true},
>                 {Artist:'Asphalt', Album:'Brighten the Corners', 
>                     Price:11.99, InStock: false},
>                 {Artist:'Asphalt', Album:'Terror Twilight', 
>                     Price:11.99, InStock: true},
>                 {Artist:'Asphalt', Album:'Buildings Meet the Sky', 
>                     Price:14.99, InStock: true},
>                 {Artist:'Other', Album:'Other', Price:5.99, InStock: true}
>             ];
> 
>             //Initialize the DataGrid control with sorted data.
>             private function initDP():void {
>                 //Create an ArrayCollection backed by the myDP array of data.
>           myDPColl = new PagableArrayCollection(myDP); //change this line 
> when u r trying with ArrayCollection
>                 myGrid.dataProvider=myDPColl;
>             }    
>       
>         ]]>
>     </mx:Script>
> 
>     <!-- The Data Grid control. 
>             By default the grid and its columns can be sorted by clicking. 
>             The headerRelease event handler overrides the default sort
>             behavior. --> 
>     <mx:DataGrid id="myGrid" width="100%" rowCount="7">
>         <mx:columns>
>                 <mx:DataGridColumn minWidth="120" dataField="Artist" />
>                 <mx:DataGridColumn minWidth="200" dataField="Album" />
>                 <mx:DataGridColumn width="75" dataField="Price" />
>                 <mx:DataGridColumn width="75" dataField="InStock"
>                     headerText="In Stock"/>
>         </mx:columns>
>     </mx:DataGrid>
> </mx:Application> 
> 
> With this Sorting is not working. Just try it out so that u can understand it 
> well. If you replace PagableArrayCollection with ArrayCollection Sorting is 
> working fine. What is that missing in PagableArrayCollection. Or DataGrid 
> wont support pagableArrayCollection to sort. Please help me guys!!!
> 
> 
> ----- Forwarded Message ----
> From: kotha poornima <poorni_ag...@...>
> To: flexcoders <[email protected]>
> Sent: Friday, March 13, 2009 5:33:00 PM
> Subject: [flexcoders] Sorting on Datagrid
> 
> 
> Hi All,
> I have one datagrid whose values populated from the httpserver response, but 
> here the problem is when i click on the datagrid header iam getting the rows 
> sorted but some of the rows are missing. Why is this happening?? Can anyone 
> faced this issue before. Please suggest me how to solve this issue.
> 
> Thanks in Advance,
> poornima
>


Reply via email to