AdvancedDataGrid过滤,本质上是其数据源(DataProvider)的过滤,通常来说表格的DataProvider有2种数据源:HierarchicalData和平面数据ArrayCollection。因此,表格过滤就是HierarchicalData和ArrayCollection的过滤。
1、ArrayCollection的过滤
ArrayCollection的过滤,相对来说比较简单,ArrayCollection自带filterFunction函数,因此只要设置filterFunction即可实现ArrayCollection的过滤。
关于filterFunction函数如何使用,大家完全可以参考Adobe的参考手册。
f(item:Object):Boolean
如果指定的项目应保留在视图中,则返回值为 true。
如果滤镜是不支持的滤镜,则在访问此属性时 Flex 会引发错误。必须在设置 filterFunction 属性后调用 refresh() 以更新视图。
2、HierarchicalData的过滤
HierarchicalData,其source通常来说是ArrayCollection,本文假设HierarchicalData.source就是ArrayCollection。既然HierarchicalData过滤,也是ArrayCollection的过滤,因此只要判断AdvancedDataGrid.dataprovider是否为HierarchicalData,即可进行HierarchicalData和ArrayCollection的过滤。
下述为一个简单的Demo。
<!-- arrayCollection 为ArrayCollection --> <mx:AdvancedDataGrid id="adg1" designViewDataType="flat" left="4" top="39" bottom="4" right="4" creationComplete="adg1_creationCompleteHandler(event)" horizontalScrollPolicy="auto" verticalScrollPolicy="auto" selectionMode="singleRow"> <mx:dataProvider> <mx:GroupingCollection2 id="groupingCollection2" source="{arrayCollection}"> <mx:Grouping> <mx:GroupingField name="mark"> <mx:summaries> <mx:SummaryRow summaryPlacement="group"> <mx:fields> <mx:SummaryField2 dataField="inventoryvalue" label="sum mark inventoryvalue" summaryOperation="SUM"/> <mx:SummaryField2 dataField="inventory" label="sum mark inventory" summaryOperation="SUM"/> <mx:SummaryField2 dataField="outlets" label="sum mark outlets" summaryOperation="SUM"/> </mx:fields> </mx:SummaryRow> </mx:summaries> </mx:GroupingField> … |
表格adg1的dataProvider为GroupingCollection2,就是HierarchicalData,我们可以通过下述方法进行过滤,假设filterFuncton为filterFunc。
if(adg1.dataProvider.source is HierarchicalData){ _datagrid.dataProvider.source.source.filterFunction = filterFunc; adg1.dataProvider.source.source.refresh(); adg1.dataProvider.source.refresh(); }else{ adg1.dataProvider.filterFunction = filterFunc; adg1.dataProvider.refresh(); } |