簡體   English   中英

一個人應該如何查看使用相同基礎ArrayCollection的不同數據網格中的不同過濾數據?

[英]How should one view different filtered data in different datagrids that use the same underlying ArrayCollection?

我有一個全局arraycollection,其中包含與一種數據集類型有關的所有信息。 我希望有不同的數據網格來過濾數據,通常通過將特定的列等同起來。 應該怎么做呢?

編輯:到目前為止,我的想法是:如果有一個用於數據網格的過濾器函數,而不是基礎的數組集合,那將解決問題。 或者,如果可以用“子集arraycollection”反映全局arraycollection,該子集自動過濾全局arraycollection,並且當然自動反映基礎數組collection中的更改,那么也可以這樣做。 這些解決方案中的任何一個都是自然的/瑣碎的嗎?

您應該為此使用ListCollectionView

它允許對基礎源集合的自定義過濾器。 對源集合的更改將反映在過濾視圖中。

即:

 [Bindable]
 public var allTheData:ArrayCollection;


 <mx:ListCollectionView list="{allTheData}" filterFunction="myFilterFunction" id="filteredView1" />


<mx:DataGrid dataProvider="{filteredView1}" />

這是一種方法。 盡管此示例使用列表,但它應適用於DataGrid,因為它是要過濾的集合而不是視圖。 “添加列表項”按鈕和addListItems()方法顯示了一種在基礎數據更改時更新已過濾列表的方法。

<fx:Script>
    <![CDATA[
        private function populateListA(collection:ArrayCollection):ArrayCollection
        {
            var ac:ArrayCollection = new ArrayCollection(collection.source);                
            ac.filterFunction = filterListA;
            ac.refresh();                   
            return ac;
        }

        private function populateListB(collection:ArrayCollection):ArrayCollection
        {
            var ac:ArrayCollection = new ArrayCollection(collection.source);                
            ac.filterFunction = filterListB;
            ac.refresh();               
            return ac;
        }

        private function filterListA(item:Object):Boolean
        {
            return item == "ListA";
        }

        private function filterListB(item:Object):Boolean
        {
            return item == "ListB";
        }

        private function addListItems():void
        {   
            arrayCollection.addItem("ListA");
            arrayCollection.addItem("ListB");               
            listA.dataProvider = populateListA(arrayCollection);
            listB.dataProvider = populateListB(arrayCollection);
        }
    ]]>
</fx:Script>
<fx:Declarations>
    <s:ArrayCollection id="arrayCollection">
        <fx:Array>
            <fx:String>ListA</fx:String>
            <fx:String>ListA</fx:String>
            <fx:String>ListA</fx:String>
            <fx:String>ListB</fx:String>
            <fx:String>ListB</fx:String>
            <fx:String>ListB</fx:String>
        </fx:Array>
    </s:ArrayCollection>
</fx:Declarations>
<s:layout>
    <s:VerticalLayout/>
</s:layout>
<s:List id="listA"
        dataProvider="{populateListA(arrayCollection)}"/>
<s:List id="listB"
        dataProvider="{populateListB(arrayCollection)}"/>
<s:Button click="addListItems()"
          label="Add List Items"/>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM