Flex 4: невозможно предварительно выбрать элемент в DataGrid (Array) - PullRequest
0 голосов
/ 24 сентября 2010

Я опрашиваю RemoteObject каждые 5 секунд, используя setInterval, и возвращаемый результат (Array) подается в DataGrid как DataProvider. Однако каждый раз, когда это происходит, выбранная строка отменяется при обновлении 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 ]

2 голосов
/ 28 сентября 2010

Лучший способ сделать это - заставить ваши объекты реализовать интерфейс IUID, который используется элементами управления Flex List для определения соответствия объектов.

Если элемент из последнего опроса имеет тот же IUID, что и старый, он все равно будет выбран. http://livedocs.adobe.com/flex/3/html/help.html?content=about_dataproviders_8.html

2 голосов
/ 25 сентября 2010

Похоже, у вас есть уникальное свойство 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;
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...