在通过WCF RIA服务进行更新后,我遇到了刷新页面数据的问题。
我在页面上有一个ComboBox和一个Button。用户从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中(即使记录已在数据库中更新)。如果我刷新页面,该项目将从ComboBox中消失。
有什么想法吗?
PS:我从内存中写了这段代码,因为我没有代码。所以我可能忘了一条线,但我想我得到了所有相关的线。
答案 0 :(得分:3)
您是否尝试将ComboBox.ItemsSource设置为从Load方法返回的Entities集合? EntitySets(context.Cigarettes)是聚合的(它们包含来自多个加载的数据),而LoadOperation.Entities则不包含(它只包含来自它所代表的加载的数据)。
答案 1 :(得分:0)
接受的解决方案的问题是该集合现在已断开连接,这与添加和删除绑定项目的内置优雅相混淆。
或许更好的解决方案是在软删除后分离有问题的实体
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());
}