2010-12-15 15 views
1

ここに私の状況です:Silverlight 4 with RIA Services - Refresh DatagridがCollectionViewにバインドされています

私はSilverlight 4ページにドメインデータソースを持っています。 RIAサービスから関連するエンティティを取り出し、コレクションビューを使用して同じページに表示しました。

ボタンクリックイベントでは、エンティティを挿入/追加します(下記のコードスニペットを参照)。

データグリッドを更新するにはどうすればよいですか?私は間違って何をしていますか?

データがデータベースに挿入されていることはわかっていますが、ページを離れて戻ることなくグリッドを更新することはできません。

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

が、私はそれがされている必要がありますよりも、この方法はより複雑になった 'INotifyCollectionChanged' –

答えて

1

私の問題は、私のdomaindatasourceの「外側」を追加していたことです。これはそれを行うための最適な方法がある

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(); 
} 

わからない場合は、それは私の仕事:ここ

は私がやってしまったものです。

をあなたの元のコードでは:

3

RefreshCurrentを使用するように負荷を変更してください。

ctx.Load(query、LoadBehavior.RefreshCurrent、GetCategoriesByLevelQuery_Loaded、null);利用可能

3つの負荷の行動:

は現在(デフォルト)を保つには、クライアントにキャッシュされたバージョンは、ロード操作で変更されていないことを意味します。エンティティは新しい情報で更新されません。

現在にマージ:キャッシュされたエンティティに変更がなければ、ロード操作エンティティで更新されます。これは、ユーザーが送信前に入力したデータを失いたくないため、ユーザーがデータを編集している場合、最も安全な選択肢と思われます。

リフレッシュ・カレント:キャッシュ内のすべてのエンティティは、ロード操作エンティティの情報で更新されます。これは、ユーザーが行ったがコミットしていない変更を上書きする可能性があります。このオプションには注意してください。

+0

を研究する価値があるかもしれません(下記の私の答えを参照してください)。お返事ありがとうございます。 – Mozy

0

正しい方法はDomainDataSource.DataContextにDomainDataSource.DataViewではなく、新たな項目を追加することになります。これは、ページングといくつかの意味を持つことになります

DomainDataSource.DataView.Add(y); 

。新しいアイテムは現在のページに追加され、サイズが拡張されます。リフレッシュ後、サイズが調整されます。

参考:here

関連する問題