Silverlight 4 со службами RIA - обновление сетки данных, привязанной к CollectionView - PullRequest
1 голос
/ 15 декабря 2010

Вот моя ситуация:

У меня есть источник данных домена на моей странице Silverlight 4.Я извлек связанные сущности из RIA Services и отобразил их на той же странице, используя представление коллекции.

В случае нажатия кнопки я вставляю / добавляю сущность (см. Фрагмент кода ниже).

Как получить сетку данных для обновления?Что я делаю не так?

Я знаю, что данные вставляются в базу данных, просто не удается обновить сетку, не покидая страницу и не возвращаясь.

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

Ответы [ 3 ]

3 голосов
/ 17 декабря 2010

Попробуйте изменить нагрузку для использования RefreshCurrent.

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

Доступны три режима загрузки:

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

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

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

1 голос
/ 22 декабря 2010

Моя проблема заключалась в добавлении "извне" моего 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();
}

Не уверен, что это оптимальный способ сделать это, но у меня все получилось.

0 голосов
/ 24 ноября 2011

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

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

DomainDataSource.DataView.Add(y);

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

Ссылка: здесь

...