package custom { import mx.collections.ArrayCollection; import mx.collections.Sort; import mx.collections.SortField; import mx.events.DataGridEvent; public class PageGrid extends ExtendedDataGrid { private var pageSize:int = 20; private var _page:int = 1; private var current:int = 0; private var masterData:ArrayCollection; private var filteredData:ArrayCollection; private var pagedData:ArrayCollection; [Bindable] public var pageNum:int=1; // The Sort object used to sort the collection. private var sortA:Sort; // The sort fields used to determine the sort. private var sortByDate:SortField; private var sortByName:SortField; public function PageGrid() { super(); } public function setMasterData():void{ masterData = new ArrayCollection((dataProvider as ArrayCollection).toArray()); filteredData = new ArrayCollection((dataProvider as ArrayCollection).toArray()); setSort(); pageNum=1; page = 1; } public function setFilters(type:String,category:String,product:String,bool:Boolean):void{ if (filteredData){ filteredData.removeAll(); for each (var item:Object in masterData){ if (type == "All" || item.type.toLowerCase() == type){ if (category == "All" || item.category == category){ if (product == "All" || item.products_string==null || item.products_string.indexOf(product)!=-1){ filteredData.addItem(item); } } } } setSort(); dataProvider = filteredData; dataProvider.refresh(); validateNow(); if (!bool) page = 1; } } private function setSort():void{ sortA = new Sort(); sortByDate = new SortField("created_on", true, false); sortByName = new SortField("title", true); sortA.fields=[sortByDate, sortByName]; filteredData.sort= sortA; filteredData.refresh(); } public function set page(num:int):void{ pageNum=num; _page=num-1; pagedData = new ArrayCollection( filteredData.toArray().slice((_page * pageSize),(_page * pageSize) + pageSize) ); dataProvider = pagedData; dataProvider.refresh(); validateNow(); } public function get numPages():int{ if (filteredData) return Math.ceil(filteredData.length / pageSize); else return 0 } public function get page():int{ return _page+1; } // Re-sort the DataGrid control when the user clicks a header. private function reSort(event:DataGridEvent):void { var dp:ArrayCollection = dataProvider as ArrayCollection; // The clicked column determines the new first priority. if (event.columnIndex==0) { if (sortA.fields[0] == sortByDate){ if (sortByDate.descending) sortByDate.descending = false; else sortByDate.descending = true; } else{ sortA.fields[0] = sortByDate; } } else if (event.columnIndex==1) { if (sortA.fields[0] == sortByName){ if (sortByName.descending) sortByName.descending = false; else sortByName.descending = true; } else{ sortA.fields[0] = sortByName; } } // Apply the updated sort fields and re-sort. dp.sort=sortA; // Refresh the collection to show the sort in the grid. dp.refresh(); // Prevent the DataGrid from doing a default column sort. event.preventDefault(); validateNow(); //invalidateList(); //invalidateDisplayList(); } } }