2013-10-10 72 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