2010-12-15 58 views
1

Voici ma situation:Silverlight 4 avec RIA Services - Refresh Datagrid lié à CollectionView

J'ai une source de données de domaine dans ma page Silverlight 4. J'ai extrait des entités associées de RIA Services et les ai affichées sur la même page à l'aide d'une collection.

Dans un événement de clic sur un bouton, j'insère/ajoute une entité (voir l'extrait de code ci-dessous).

Comment puis-je actualiser le DataGrid? Qu'est-ce que je fais mal?

Je sais que les données sont insérées dans la base de données ne peuvent tout simplement pas actualiser la grille sans quitter la page et revenir.

DomainContext ctx = new DomainContext(); 
foreach (<Entity> x in EntityList) 
     { 
     <Entity> y = new <Entity> 
     { 
      .... <set values> 
     };    

     ctx.<Entity>.Add(y); 

     } 

     ctx.SubmitChanges(); 
     DomainDataSource.Load(); ; 
     CollectionView.View.Refresh();    
+0

vaudraient peut-être des recherches 'INotifyCollectionChanged' –

Répondre

1

Mon problème était d'ajouter "outside" mon domaindatasource.

Voici ce que je fini par faire:

DomainContext ctx = (MyDDS)DomainDataSource.DomainContext; //new DomainContext(); 
foreach (<Entity> x in EntityList) 
    { 
    <Entity> y = new <Entity> 
    { 
     .... <set values> 
    };    

    ctx.<Entity>.Add(y); 

    } 

    ctx.SubmitChanges(); 
    .... 
    private void MyDDS_SubmittedChanges(object sender, SubmittedChangesEventArgs e) 
{ 
    MyDDS.Load(); 
} 

Je ne sais pas si cela est la meilleure façon de le faire, mais cela a fonctionné pour moi.

3

Essayez de modifier votre charge pour utiliser RefreshCurrent.

ctx.Load (query, LoadBehavior.RefreshCurrent, GetCategoriesByLevelQuery_Loaded, null);

Les trois comportements de charge disponibles:

tenir au courant (par défaut): signifie que la version mise en mémoire cache sur le client ne change pas avec l'opération de chargement. Les entités ne seront pas mises à jour avec de nouvelles informations.

Fusionner dans le courant: si aucune modification n'a été apportée à une entité mise en cache, elle sera mise à jour avec les entités d'opération de chargement. Cela semble être l'option la plus sûre si l'utilisateur édite des données parce que l'utilisateur ne voudra pas perdre les données qu'il a saisies avant un envoi.

Actualiser le courant: toutes les entités du cache seront mises à jour avec des informations provenant des entités d'opération de chargement. Cela a la possibilité d'écraser une modification que l'utilisateur a faite mais pas validée. Soyez prudent avec cette option.

+0

je faisais de cette façon plus compliquée que cela aurait dû être (voir ma réponse ci-dessous). Merci d'avoir répondu. – Mozy

0

La bonne façon sera d'ajouter le nouvel élément dans la DomainDataSource.DataView et non dans le DomainDataSource.DataContext:

Dans votre code d'origine:

DomainDataSource.DataView.Add(y); 

Cela aura des implications avec la pagination . Les nouveaux éléments seront ajoutés dans la page actuelle, en étendant sa taille. Après un rafraîchissement, la taille sera ajustée.

Référence: here