Flex 4:无法在DataGrid(数组)中预先选择项目

时间:2010-09-24 12:00:56

标签: flex flex4

我使用setInterval每5秒轮询一次RemoteObject,返回的结果(Array)作为DataProvider被送入DataGrid。但是,每次发生这种情况时,所选行将在刷新DataGrid时取消选择。所以我想在更新DataGrid时重新选择项目。

到目前为止,我已尝试在使用以下方法调用RemoteObject之前捕获所选行:

private function refreshDataGrid(e:ResultEvent):void
{
    var selectedRow:Object = myDataGrid.selectedItem;
    myDataGrid.dataProvider = e.result as Array;
    myDataGrid.selectedItem = selectedRow;
}

然而,这不起作用。如果我选择行然后执行“trace(myDataGrid.selectedItem)”,则控制台中的结果为空。

我尝试了另一次尝试:

private function refreshDataGrid(e:ResultEvent):void
{
    var selectedItem:* = myDataGrid.selectedItem.itemId;
    myDataGrid.dataProvider = e.result as Array;
    myDataGrid.selectedItem.itemId = selectedItem;
}

这也不起作用。

任何人都可以帮我做这项工作吗?任何帮助将不胜感激。提前谢谢。

2 个答案:

答案 0 :(得分:2)

您的对象看起来有一个唯一的itemId属性。第二次尝试的问题是它试图在当前选择的项目上设置itemId,而不是将当前选择的项目更改为具有该itemId的项目。我将更改第二个版本以循环访问dataProvider并找到具有指定itemId的项目,然后将该项目设置为所选项目。像这样:

private function refreshDataGrid(e:ResultEvent):void
{
    var selectedItem:* = myDataGrid.selectedItem.itemId;
    myDataGrid.dataProvider = e.result as Array;

    for (var i:int = 0; i < myDataGrid.dataProvider.length; i++) {
        if (myDataGrid.dataProvider[i].itemId == selectedItem) {
            myDataGrid.selectedItem = myDataGrid.dataProvider[i];
            break;
        }
    }
}

答案 1 :(得分:2)

更好的方法是让对象实现IUID接口,这是Flex List控件用来确定对象是否匹配的。

如果最新民意调查中的项目与旧版本的IUID相同,则仍会选中该项目。 http://livedocs.adobe.com/flex/3/html/help.html?content=about_dataproviders_8.html