我有N级分层数据。 它是关于产品类别的N级产品的数据。
对数据应用过滤器后,我只想要满足过滤条件的那么多数据,因为我需要在应用过滤器后显示计数。
但问题是我无法从任何地方获取此类数据。 我在AdvanceDataGrid的 visibleData 属性中找到了这样的数据,但由于它被定义为受保护,因此无法访问该属性。
如果您对我的问题有任何其他解决方案,请回复我。
请查看我的代码如下:
<common:MyAdvancedDataGrid id="productsDataGrid"
width="100%"
height="100%"
focusRect="null"
borderVisible="false"
horizontalScrollPolicy="auto"
doubleClickEnabled="true"
selectionMode="multipleRows"
sortExpertMode="true"
draggableColumns="false"
defaultLeafIcon="{ null }"
displayItemsExpanded="true"
folderOpenIcon="{ null }"
folderClosedIcon="{ null }"
focusSkin="{ null }"
rowHeight="33"
sortableColumns="false"
variableRowHeight="true"
headerHeight="35"
resize="productsDataGrid_resizeHandler(event)"
keyDown="onProductDataGridKeyDown(event)"
creationComplete="onDataGridCreationComplete(event)"
selectedIndex="0">
<common:dataProvider>
<mx:HierarchicalData id="hierarchicalData"
source="{_hirarchyProductArr}"
childrenField="childCategory"/>
</common:dataProvider>
过滤代码:
<fx:Script>
<![CDATA[
private var _searchProductArr:Array;
private function onSearchChange1():void
{
_searchProductArr = new Array();
productsCount = 0;
IHierarchicalCollectionView(productsDataGrid.dataProvider).filterFunction = browseFilter;
// refresh the ADG's dataProvider
IHierarchicalCollectionView(productsDataGrid.dataProvider).refresh();
}
//Filter Function
private function browseFilter(item:Object):Boolean
{
if (item is Product)
{
var searchString:String = txtSearch.text;
if (searchString.length == 0 || item.productName.toLowerCase().indexOf(searchString.toLowerCase()) >= 0)
{
if (drdSelectProductType.selectedItem.label == ProductConstants.ALL_STR)
{
if(!isProductExist(item as Product))
{
_searchProductArr.push(item);
productsCount = _searchProductArr.length;
}
return true;
}
else if (drdSelectProductType.selectedItem.label == ProductConstants.ACTIVE_STR && (item as Product).isActive)
{
if(!isProductExist(item as Product))
{
_searchProductArr.push(item);
productsCount = _searchProductArr.length;
}
return true;
}
else if (drdSelectProductType.selectedItem.label == ProductConstants.INACTIVE_STR && !(item as Product).isActive)
{
if(!isProductExist(item as Product))
{
_searchProductArr.push(item);
productsCount = _searchProductArr.length;
}
return true;
}
else
return false;
return true;
}
else
return false;
}
else
{
var hasValidChildren:Boolean = false;
for each(var node:Object in item.childCategory)
{
if (browseFilter(node))
{
// productsCount = productsCount - 1;
hasValidChildren = true;
break;
}
}
return hasValidChildren;
}
}
private function isProductExist(value:Product):Boolean
{
for each(var product:Product in _searchProductArr)
{
if(product.productId == value.productId)
{
return true;
break;
}
}
return false;
}
]]>