2010-02-22 5 views
3

Je travaille sur une application utilisant Flex, Adobe Air. J'ai un DataGrid avec un XML comme mon DataProvider. Pendant l'exécution du programme, mon XML est mis à jour. Une fois XML mis à jour et enregistré, mon DataGrid devrait également être mis à jour. J'ai utilisé la méthode Dataprovidername.refresh() mais cela ne fonctionne pas.Actualisation de DataGrid lors de la mise à jour de DataProvider

+6

vous avez dit que vous avez résolu le problème, mais n'a pas indiqué comment. Veuillez ajouter votre solution en guise de réponse pour les personnes qui cherchent dans le futur. – geowa4

Répondre

1

Avez-vous fait la Bindable XML variable ?:

[Bindable] 
private var data:XML... 
+0

Oui, j'ai fait mon XMLListCollection Bindable ... –

5

après la mise à jour des données, essayez l'envoi d'un événement de changement de collection manuellement:

datagrid.dataProvider.dispatchEvent(new CollectionEvent(CollectionEvent.COLLECTION_CHANGE)); 
+0

Merci d'avoir répondu, j'ai résolu le problème moi-même. –

1

J'ai résolu mon problème de grille de données rafraîchissante au lieu de sauvegarder le document XML et de le charger dans le fournisseur de données de la grille de données, j'ai affecté le document XML mis à jour aux données. fournisseur en tant que nouveau fournisseur .. De cette façon, le problème rafraîchissant, avec liaison peut être résolu.

3

Pour ceux d'entre vous intéressés par les internes. Le MX Halo DataGrid et AdvanceDataGrids s'actualisent lorsqu'ils détectent des modifications au fournisseur de données. Cela devrait être automatique. Ce bien sûr ne fonctionnera que si vous marquez le fournisseur de données comme liable et modifiez la variable qui est le fournisseur de données lui-même. C'est toujours une bonne idée d'avoir votre dataprovider comme ICollectionView. Par exemple, si vous spécifiez un "Array" ou un "XML" en tant que fournisseur de données pour un DataGrid, le DataGrid crée en interne un nouveau ArrayCollection ou XmlListCollection et l'utilise comme fournisseur de données à la place. Dans ce cas, l'ajout/la suppression du tableau source n'aura aucun impact. De plus, si vous avez besoin de "re-dessiner" le DataGrid, vous devez appeler invalidateList() à la place. Beaucoup de gens pensent que "invalidateDisplayList()" devrait le faire, mais ce n'est pas le cas. Cela s'applique à tous les contrôles basés sur la liste (ceux qui héritent de ListBase).

+0

Vous n'avez aucune idée de combien vous m'avez aidé avec ce commentaire. Merci beaucoup! –

Questions connexes