2010-12-15 3 views
1

Вот моя ситуация:Silverlight 4 с 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` – 2010-12-15 20:31:23

ответ

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 (запрос, LoadBehavior.RefreshCurrent, GetCategoriesByLevelQuery_Loaded, null);

три модели поведения нагрузки доступны:

Keep Current (по умолчанию): означает, что версия, которая кэшируется на клиенте не меняется с нагрузкой. Объекты не будут обновляться с новой информацией.

Merge Into Current: если никаких изменений в кэшированном объекте не было, оно будет обновляться объектами операции загрузки. Это, пожалуй, самый безопасный вариант, если пользователь будет редактировать данные, потому что пользователь не захочет терять данные, которые они вводили до отправки.

Обновить Текущий: все объекты в кеше будут обновлены информацией от объектов операции загрузки. У этого есть возможность перезаписать изменения, сделанные пользователем, но не совершенные. Будьте осторожны с этой опцией.

+0

Я делал это гораздо сложнее, чем это должно было быть (Смотрите мой ответ ниже). Спасибо, что ответили. – Mozy 2010-12-21 21:39:32

0

Правильный путь будет добавить новый элемент в DomainDataSource.DataView, а не в DomainDataSource.DataContext:

В исходном коде:

DomainDataSource.DataView.Add(y); 

Это будет иметь некоторые последствия с подкачкой , Новые элементы будут добавлены на текущей странице, расширяя ее размер. После обновления размер будет скорректирован.

Ссылка: here

Смежные вопросы