2010-09-24 5 views
0

J'interroge un objet RemoteObject toutes les 5 secondes à l'aide de setInterval et le résultat renvoyé (Array) est transmis à un DataGrid en tant que DataProvider. Toutefois, à chaque fois que cela se produit, la ligne sélectionnée désélectionne lorsque le DataGrid est actualisé. Je veux donc re-sélectionner l'élément lorsque le DataGrid a été mis à jour.Flex 4: Impossible de présélectionner l'élément dans DataGrid (Array)

Jusqu'à présent, j'ai essayé de capturer la ligne sélectionnée avant la RemoteObject est appelée à l'aide:

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

Toutefois, cela ne fonctionne pas. Si je sélectionne la ligne, puis que je fais un "trace (myDataGrid.selectedItem)", le résultat dans la console est vide.

Dans une autre tentative, j'ai essayé:

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

Cela ne fonctionne pas non plus.

Quelqu'un peut-il m'aider à faire ce travail? Toute aide serait grandement appréciée. Merci d'avance.

Répondre

2

Il semble que vous ayez une propriété itemId unique sur vos objets. Le problème avec votre deuxième tentative est qu'il tente de définir l'élément itemId sur l'élément actuellement sélectionné plutôt que de changer l'élément actuellement sélectionné pour l'élément qui a cet itemId. Je voudrais changer la deuxième version à la boucle à travers le dataProvider et localiser l'élément avec l'itemId spécifié, puis définissez cet élément comme l'élément sélectionné. Quelque chose comme ceci:

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; 
     } 
    } 
} 
+0

Ce fut le plus facile à mettre en œuvre et fonctionne très bien. Merci. – Reado

2

Une meilleure façon de le faire est de rendre vos objets implémentent l'interface IUID, qui est ce qui contrôle la liste Flex utiliser pour déterminer si les objets correspondent.

Si l'élément du dernier sondage a le même IUID que l'ancien, il sera toujours sélectionné.

+0

Je vous ai donné +1 parce que c'est une bonne réponse et que je vais envisager de construire dans l'application dans un proche avenir. Merci. – Reado