2010-05-26 53 views
0

我有一個Flex應用程序,其中我在每個選項卡中都有一個帶有多個選項卡和數據網格的TabNavigator。我已經將單個數據數組綁定到每個網格。Flex - Tab View多個DataGrids和相同的數據提供程序

我想要做的是將每個網格與該數組中的一組特定數據綁定,即根據數據類型在網格之間分配數組內容。例如,以字母A開頭的項目可以顯示在第一個網格中,B顯示在第二個中,以C開頭,等等。因此,您可以按字母順序將數據分佈在不同的網格上。問題是數據將被用戶隨機添加。

爲每個網格創建一個數據數組不是一個選項(由於設計限制)。

有什麼建議嗎?

在此先感謝

回答

0

你可能尋找的過濾器,this article將幫助你過濾器背後的想法。

基本上,我明白它的方法,有一個函數會傳遞每個項目,它會測試該項目的條件,並返回true,如果它通過(你想要它被包含)或假沒有。

您需要爲不同的網格創建不同的過濾器函數。

我希望這可以幫助,如果你需要更多的幫助只是讓我知道。

+0

這是一個好主意。謝謝。還有一個問題,如果我想在不同的選項卡視圖上使用相同的DataGrid,該怎麼辦?這甚至有可能嗎? – user283403 2010-05-26 07:21:07

+0

我目前沒有安裝Flash Builder,但我猜你可以通過在選項卡外定義DataGrid,然後使用addChild()將它添加到選項卡來實現此目的。 我不確定這會起作用,或者如果這是您需要的,但它值得一試。 – 2010-05-29 04:53:16

0

要使用單個DataGrid和單個列表執行此操作,請在列表中使用基於選項卡激活(針對單個列表部分)更改的篩選器函數。使用單個DataGrid的一種簡單(儘管可能很笨拙)的方法是將DataGrid覆蓋在TabNavigator上。這是很容易使用絕對佈局像一個畫布容器做到:

<mx:TabNavigator x="120.7" y="127.35" width="496" height="276"> 
    <mx:Canvas label="Test" width="100%" height="100%"> 
    </mx:Canvas> 
    <mx:Canvas label="Test2" width="100%" height="100%"> 
    </mx:Canvas> 
</mx:TabNavigator> 

<mx:DataGrid x="305" y="169"> 
    <mx:columns> 
     <mx:DataGridColumn headerText="Column 1" dataField="col1"/> 
     <mx:DataGridColumn headerText="Column 2" dataField="col2"/> 
     <mx:DataGridColumn headerText="Column 3" dataField="col3"/> 
    </mx:columns> 
</mx:DataGrid> 

只要將DataGrid是上市後在MXML它會顯示在頂部與TabNavigator。當然,您需要注意在數據網格的每個選項卡上留下適當的大小空間等等。還有其他的方法可以做到這一點,但這可能是最簡單的,也可能是最安全的 - 假設您希望DataGrid在全部選項卡上可見。

但是,如果出現這種情況,您可能還需要考慮縮小TabNavigator的大小以僅包含應該在選項卡更改中更改的「東西」,將DataGrid保留在同一個更高級別的容器中作爲TabNavigator但不重疊。

如果您需要DataGrid僅在某些選項卡上可見但不是其他選項,則還可以使用actionscript在選項卡容器上調用addChild/removeChild。這工作正常和removeChild之文檔甚至提出,這是一個典型用途:

從這個容器的 子列表中刪除子DisplayObject。 刪除的孩子將其父母 屬性設置爲空。子女將 仍然存在,除非明確 銷燬。如果將其添加到另一個容器,它將保留其最後的 已知狀態。