在Flex3中为多个数据网格使用一个数据源

时间:2010-02-25 15:16:44

标签: flex datagrid flex3 flexbuilder arraycollection

我想为多个Datagrids使用一个数据源(例如一个数组),这些Datagrids附加了不同的filterFunction并显示不同的列。 首先,我认为我使用了一个非常直接的计划:

  • 创建数组
  • 为每个DataGrid创建一个ArrayCollection,并将“source”属性设置为Array
  • 创建DataGrids并将其dataProvider属性设置为其指定的ArrayCollection

所以现在。每个ArrayCollection都有自己的filterFunction,sort state等,但只需要一个包含内存中所有数据的Array。

现在到了让我完全糊涂的地步: 当新项目添加到Array时,当然不会调度Events,我必须在每个ArrayCollections上手动调用itemUpdated。在调试代码以便更深入地了解Flex时,我试图弄清楚,这个神秘的“itemUpdated”方法做了什么,特别是在adobe文档中注意到的,如果没有给出“属性”(例如它是null),将发生一个简单的“refresh()”。 在整个调试中我没有找到任何“refresh()”的调用(我尽可能深入了解整个框架(顺便说一下:代码中有很多有趣的注释:-)))。 我唯一能找到的是CollectionChangeEvent在其“item”属性中使用PropertyChangeEvent进行调度。哪种是“更新”(而不是像我期望的那样“添加”)。当尝试手动分派该事件时,它从未起作用(例如,数据网格没有更新)。 我知道我现在必须坚持使用itemUpdated,但由于数据提供者可以变大(在两个维度上),性能确实与我有关,我想了解幕后发生的事情。

正如预期的那样,没有adobe的帮助: - (

非常感谢所有读过这整篇文章的人。 对于任何能够回答并给我一些细节的人提出一个更大的感谢,暗示我如何摆脱困惑并理解(如果可能的话)可以更好一点。

最好的问候,

赫伯特

1 个答案:

答案 0 :(得分:1)

您必须为每个dataProviders调用ArrayCollection.refresh()以获取dataGrids以显示对源数组的新更改。