如何在数据提供程序上应用过滤器后获取准确数据?

时间:2015-08-14 09:56:03

标签: actionscript-3 flex actionscript hierarchical-data

我有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;
}
]]>

0 个答案:

没有答案