0

我正在编写一个使用 EF 与 SQL Express 通信的 C#.Net windows 应用程序。我的应用程序中有一个联系人表。为了编辑联系人,我通过 ShowDialogue() 方法调用了一个新的窗口窗体并使用了 ApplyCurrentValue 方法。在此表单中,如果我获取联系人列表(使用 db.Contacts.ToList() 方法),可以看到更改,但是当我关闭表单并想要刷新主表单中存在的 gridview 时,我看不到除非我重新启动整个应用程序,否则更改。

这是显示新表单的代码:

NewContactForm contact = new NewContactForm();
        contact.TopLevel = true;
        contact.ShowInTaskbar = false;
        contact.ShowDialog();
        RefreshForm();
        FillGridView();

我已经更改了contactToEdit 对象的属性并希望保存更改。所以:

public void UpdateContact(Contact contactToEdit)
    {
        db.Contacts.ApplyCurrentValues(contactToEdit);
        db.SaveChanges();
    }

现在我想使用 FillGridView() 中的这段代码显示联系人列表:

db.Contacts.ToList();

我错过了一些代码吗?我什至用过 db.AcceptAllChanges() 但没用

4

2 回答 2

0

好的..这是对我有用的解决方案

在我的主窗体(父范围)中,我使用以下简单代码刷新了修改后的对象:

db.Refresh(System.Data.Objects.RefreshMode.StoreWins, contactToEdit)

以后一切都很好!

于 2012-05-16T04:43:14.293 回答
0

这是您可能想尝试的一些代码。

db.Contacts.Single(Contact => Contact.ContactID == <lets say, 5>).Name = "Pete";
db.Contacts.Single(Contact => Contact.ContactID == <lets say, 5>).Surname = "Repeat";

db.SaveChanges();

这是我使用实体框架更新数据库中记录的方法。看看这是否有帮助。您可以使用您的toList()方法或查询联系人模型进行测试

var contactquery = (from x in db.Contacts where x.ContactID == <lets say, 5> select new {contactName = x.Name});

List<string> contactNames = new List();

foreach (var name in contactquery)
{
     contactNames.Add(name.contactName);
}

更新 这只是一个澄清更新。在我说的地方,它可以是代表 Single() 方法中所述字段的任何值。single() 所做的是它只从查询中提取第一条记录,该查询由其中的 lambda 表达式确定。

更新 2 修复了我的代码中的一个错误。请修改你的

于 2012-05-15T10:41:17.520 回答