如何使用针对每个数据网格以不同方式过滤的单个数据源在flex中填充多个数据网格。我将event.result从我的远程对象调用分配给三个不同的数组,每个数组都有自己的过滤函数。当我分配和刷新过滤器函数时,它们都会影响所有数组集合。因此,最后一个数组集合刷新的结果将在所有三个数据网格中结束。
答案 0 :(得分:3)
您可能需要使用ObjectUtil。复制事件结果以获得3个独立的ArrayCollections,每个DataGrid一个...否则它们都指向单个ArrayCollection的相同内存位置以及对其进行的任何更改它将反映在所有DataGrids中。
var AC1:ArrayCollection = event.result as ArrayCollection;
var AC2:ArrayCollection = ObjectUtil.copy(AC1) as ArrayCollection;
var AC3:ArrayCollection = ObjectUtil.copy(AC1) as ArrayCollection;
答案 1 :(得分:2)
我会复制您的数据提供者,即:
var myDataArray:Array; // this contains your original data.
dataGrid1.dataProvider = new ArrayCollection(myDataArray.concat());
dataGrid2.dataProvider = new ArrayCollection(myDataArray.concat());
dataGrid3.dataProvider = new ArrayCollection(myDataArray.concat());
答案 2 :(得分:0)
提供的解决方案可能无法按照您的意愿行事。 ArrayCollection在技术上由模型和模型中的“视图”组成。根据我的理解,所提供的解决方案都会创建模型的副本。这意味着如果将项添加到一个ArrayCollection,它将不会显示在另一个ArrayCollection中,无论它是否与ArrayCollection的过滤器匹配。 通常您希望它也是其他ArrayCollections模型的一部分,但只有在添加的项目通过相应的ArrayCollection过滤器时才可见。您可以在ArrayCollections中共享“模型”,同时在模型中具有单独的视图,如下所示:
var collection1:ArrayCollection = new ArrayCollection();
var collection2:ArrayCollection = new ArrayCollection();
collection2.list = collection1.list;
var collection3:ArrayCollection = new ArrayCollection();
collection3.list = collection1.list;
现在,您可以将项目添加到三个集合中的任何一个,它将显示在其他集合中。但是,您可以在每个ArrayCollection上使用单独的过滤器和排序,这不会影响其他ArrayCollection中的可查看内容。你可以在这里阅读更多相关信息:
http://aaronhardy.com/flex/collections-and-chaining-for-separate-presentation/