2013-10-10 80 views
0

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

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

当我这样做了,我得到这样的:

ScreenShot 1

当我modyfy代码:

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

我的形式如下:

enter image description here

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

任何人都可以通过显示一些代码片段或指出我能找到解决方案来帮助我解决这个问题吗?

谢谢!

@Update 我使用VS 2012和SQL Server 2012(如果该事项)

+0

为什么不呢?你甚至不使用任何'保存代码',所以你如何更新? –

+0

好吧,但我什至不能改变任何数据网格 – szpic

回答

2

这是因为电网的基础数据源不支持修改。解决方案:

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

多亏了王中王的评论

更新: 要保存更改,你需要保留它实际上跟踪检索到的实体,现在都在网格中提出的修改上下文。所以一个办法(也许最简单的方法)是声明上下文模板构件:

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不推荐保存很长一段时间。关于上下文的生命周期有很多文章。

+2

它应该是'新BindingList (customersQuery.ToList())' –

+0

谢谢!你能告诉我更多的事情,我应该添加saveChanges()来记住更改吗? – szpic

+0

@szpic要保存更改,您需要保留*上下文*。我会在一分钟内更新答案,告诉你如何。 – Alireza

相关问题