【问题标题】:Silverlight 4 with RIA Services - Refresh Datagrid bound to CollectionViewSilverlight 4 与 RIA 服务 - 刷新绑定到 CollectionView 的 Datagrid
【发布时间】:2010-12-15 20:15:40
【问题描述】:

这是我的情况:

我的 Silverlight 4 页面中有一个域数据源。我已经从 RIA 服务中提取了关联实体,并使用集合视图将它们显示在同一页面上。

在按钮单击事件中,我插入/添加一个实体(参见下面的代码 sn-p)。

如何让数据网格刷新?我做错了什么?

我知道数据被插入到数据库中,只是无法在不离开页面并返回的情况下刷新网格。

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

【问题讨论】:

  • 可能值得研究INotifyCollectionChanged

标签: silverlight-4.0 wcf-ria-services


【解决方案1】:

尝试更改负载以使用 RefreshCurrent。

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

三种可用的加载行为:

保持最新(默认):表示客户端缓存的版本不会随着加载操作而改变。实体不会更新新信息。

Merge Into Current:如果没有对缓存实体进行修改,它将使用加载操作实体进行更新。如果用户将要编辑数据,这似乎是最安全的选择,因为用户不想丢失他们在提交之前输入的数据。

刷新当前:缓存中的所有实体都将使用来自加载操作实体的信息进行更新。这有可能覆盖用户已做出但未提交的更改。请谨慎使用此选项。

【讨论】:

  • 我让这种方式比它应该的更复杂(见下面我的回答)。感谢您的回复。
【解决方案2】:

我的问题是在我的域数据源“外部”添加。

这是我最终做的:

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】:

    正确的方法是在 DomainDataSource.DataView 中而不是在 DomainDataSource.DataContext 中添加新项目:

    在您的原始代码中:

    DomainDataSource.DataView.Add(y);
    

    这将对分页产生一些影响。新项目将添加到当前页面中,扩展其大小。刷新后会调整大小。

    参考:here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-05
      • 2023-04-09
      • 1970-01-01
      相关资源
      最近更新 更多