0

我正在尝试学习实体框架,但我有一些我自己无法解决的问题我正在将数据从 MS SQL 数据库加载到数据网格并尝试从那里修改/添加数据。但我不知道如何实现这一点。这是我的代码:

    using (var context = new OrdersDataModelContainer())
        {
            var customersQuery = from o in context.Payments
                                 select o;
            dataGridView1.DataSource = customersQuery;
        }

当我这样做时,我得到了这个:

截图 1

当我修改代码时:

    using (var context = new OrdersDataModelContainer())
        {
            var customersQuery = from o in context.Payments
                                 select o;
            dataGridView1.DataSource = customersQuery.ToList();
        }

我的表格看起来:

在此处输入图像描述

但后来我无法修改数据或添加新行。

谁能通过显示一些代码片段或指出我可以找到解决方案的地方来帮助我解决这个问题?

谢谢!

@Update 我使用 VS 2012 和 SQL Server 2012(如果重要的话)

4

1 回答 1

3

这是因为网格的底层数据源不支持修改。解决方案:

using (var context = new OrdersDataModelContainer())
{
    var customersQuery = from o in context.Payments
                         select o;
    dataGridView1.DataSource = new BindingList<Payments>(customersQuery.ToList());
}

感谢King King的评论

更新: 要保存更改,您需要保留上下文,该上下文实际上跟踪对现在显示在网格中的检索实体的修改。所以一种方法(也许是最简单的方法)是将上下文声明为表单成员:

public partial class Form1 : Form
{
     private MyDBContext context = new MyDBContext(); // whatever your context name is

     private void btnLoadData_Click(object sender, EventArgs e) // when you want to load the data
     {
        var customersQuery = from o in context.Payments
                             select o;
        dataGridView1.DataSource = new BindingList<Payments>(customersQuery.ToList());
     }

     private void btnSaveChanges_Click(object sender, EventArgs e) // when you want to save
     {  
       context.SaveChanges();
     }
}

请注意,context不建议长期保存。有很多关于上下文生命周期的文章。

于 2013-10-10T18:04:06.807 回答