我的AdvancedDataGrid小部件有问题。当dataProvider是一个ArrayCollection(数组)时,第n个数组(在集合中)也是网格中的第n行,我可以通过脚本来跳转并显示第i行
adg.selectedIndex = i;
adg.scrollToIndex(i);
现在,当我添加分组时,dataProvider最终成为GroupingCollection2,现在dataprovider源中的索引不再与adg中的索引相对应(这是可以理解的,因为它正在被分组)。
如何有效地选择和显示分组数据中的行?目前,我必须遍历adg并将每个找到的项目与其数据属性进行比较,以便在adg中找到行的正确索引,并像上面一样跳转到它。这个过程非常缓慢。有什么想法吗?
稍后编辑: 我们已经使用了Shaun建议的缓存对象,但它仍然没有弥补搜索时间。为了完全构造事物列表的排序(这个问题等同于,因为列表完全由分组重新排序),你总是必须知道整个集合。最后我们没有解决这个问题。该项目现已结束。如果三天内没有人知道更好的方法,我会接受肖恩的回答。
答案 0 :(得分:0)
根据您与之比较的值,您可以使用要搜索的属性/属性将对象存储在字典中,这样您就可以对对象进行恒定的时间查找(无需查看在每一个项目)。例如,假设您在对象上使用名为id的属性,那么您可以创建一个AS对象,如
var idLookup:Object = {};
for(myObject in objects)
idLookup[myObject.id] = myObject;
//Say you want multiple properties
//idLookup[myObject.id]={};
//idLookup[myObject.id][myObject.otherProp] = myObject;
现在说用户输入一个id,你进入id属性的idLookup对象并检索对象:
var myObject:Object = idLookup [userInput.text]; myAdg.expandItem(myObject,true);
现在,当你想通过id获取一个对象时,你可以这样做 http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/mx/controls/AdvancedDataGrid.html#expandItem() 我没有直接对此进行过任何彻底的测试,但使用类似的概念来进行高级过滤的快速查找。让我知道这是否有所帮助或是朝着错误的方向发展。此外,如果您可以在需要查找的值的类型/数量以及是否有可能进行多次匹配等方面进行澄清,我可以提供更好的答案。
祝你好运,肖恩