2 votes

Conserver la sélection lors du rafraîchissement de la grille de données en ActionScript

Je travaille sur ma toute première application AIR avec flashbuilder - juste pour que vous sachiez.

J'ai lié un mx:DataGrid à un DataProvider qui est un mx:HTTPService récupération d'un fichier xml avec des éléments. Pour garder les données à jour, j'interroge le webservice à un intervalle donné.

Mon problème est que je perds l'élément actuellement sélectionné dans mon DataGrid lorsque les données sont mises à jour. J'ai essayé de sauvegarder l'élément DataGrid.selectedIndex et défini lorsque les données sont mises à jour, mais je ne suis pas sûr du moment où il faut le faire ! La solution la plus proche que j'ai trouvée est de restaurer l'index lorsque le fichier updateComplete de DataGrid est déclenché. Cela fonctionne, mais la sélection s'efface d'abord, puis s'actualise - elle n'est pas mise à jour assez tôt.

Quelle est donc la meilleure façon de conserver la sélection ? (un seul élément sélectionné à la fois)

Et comme question secondaire : existe-t-il un moyen pratique de sólo mettre à jour les données lorsqu'elles ont effectivement changé ?

Merci pour toute suggestion !

1voto

Organiccat Points 2034

Je vais commencer par le bas, la seule façon de ne mettre à jour les données que lorsqu'elles ont changé est de passer une vérification sur les données du côté du serveur pour voir si les données ont changé et de faire cet appel avant la mise à jour réelle. Donc, en résumé, vous faites deux appels, l'un pour voir si les données ont changé, ce qui est une requête côté serveur, et le suivant, seulement si cela renvoie vrai, qui met à jour les données.

Vous pouvez aussi obtenir la mise à jour, la comparer à vos données actuelles et ne mettre à jour l'interface utilisateur que si ces données sont différentes, mais j'ai l'impression que vous voulez parler de la première réponse qui consiste à ne faire la mise à jour CALL que si les données ont changé.

Quant à l'autre solution, après avoir enregistré le selectedIndex, faites ceci dans votre updateComplete :

private function yourDataGridUpdateComplete(event:FlexEvent):void{ 
    yourDataGrid.selectedIndex = yourIndex;
    yourDataGrid.validateNow();
    yourDataGrid.scrollToIndex(yourIndex);
}

1voto

Gregor Kiddie Points 3071

La DG utilise l'UUID des éléments de données pour déterminer si l'élément doit rester sélectionné après un rafraîchissement. Si les éléments de données n'implémentent pas IUID ils obtiennent essentiellement des valeurs aléatoires créées à chaque fois qu'ils sont ajoutés à la DG.

Si vos éléments de données mettent en œuvre l'IUID et que vous utilisez une valeur cohérente (le numéro de séquence de la base de données, par exemple), la DG "saura" qu'après un rafraîchissement, l'élément de données est le même que précédemment.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X