繁体   English   中英

WCF RIA服务问题与更新

[英]WCF RIA Services Issue With Updating

通过WCF RIA服务进行更新后,刷新页面上的数据时遇到问题。

我在页面上有一个ComboBox和一个Button。 用户从组合框中选择一个项目,然后单击按钮。 这将对数据库中的项目进行软删除(设置为“ Active” = false)。 但是,我希望在更新完成后将其从ComboBox中删除。 这是我的问题所在。

InventorySystemDomainContext context = new InventorySystemDomainContext();

private void btnDelete_Click(object sender, RoutedEventArgs e)
{
    Cigarette c = cboCigarette.SelectedItem as Cigarette;
    c.Active = false;

    SubmitOperation so = context.SubmitChanges();
    so.Completed += delegate (object s, EventArgs es)
    {
        LoadComboBox();
    }
}

private void LoadComboBox()
{
    cboCigarettes.DataSource = null;
    cboCigarettes.DataSource = context.Cigarettes;
    context.Load(context.GetCigarettesQuery());
}

单击删除按钮后,所有代码都会运行。 但是,已删除的项目仍在ComboBox中(即使记录已在数据库中更新)。 如果刷新页面,则该项目将从组合框消失。

有任何想法吗?

PS:我没有记忆,所以从内存中编写了这段代码。 所以我可能忘记了一行,但我想我已经掌握了所有相关的内容。

您是否尝试过将ComboBox.ItemsSource设置为从Load方法返回的Entities集合? 实体集(context.cigarettes)正在聚合(它们包含来自多个负载的数据),而LoadOperation.Entities不是(仅包含其代表的负载中的数据)。

可接受的解决方案的问题在于,现在集合已断开连接,这与添加和删除绑定项的内置样式不符。

也许更好的解决方案是在软删除后分离有问题的实体

InventorySystemDomainContext context = new InventorySystemDomainContext();

private void btnDelete_Click(object sender, RoutedEventArgs e)
{
    Cigarette c = cboCigarette.SelectedItem as Cigarette;
    c.Active = false;

    SubmitOperation so = context.SubmitChanges(OnCigaretteSaved, null);
}

private void OnCigaretteSaved(SubmitOperation so)
{
    context.Cigarettes.Detach(context.Cigarettes.Where(item => item.Active == false).First());
}

private void LoadComboBox()
{
    cboCigarettes.DataSource = null;
    cboCigarettes.DataSource = context.Cigarettes;
    context.Load(context.GetCigarettesQuery());
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM