2013-05-01 74 views
1

我第一次使用LINQ,遇到了一個奇怪的問題。我正在使用MS SQL 2008.如果我更改了一行和SubmitChanges(),我可以看到SQL Server Management Studio中的更改,但是當我查詢用更新的信息填充我的dataGridViews時,我得到舊版本的數據。Linq to SQL:SubmitChanges無法正常工作後更新dataGridView

下面是我的數據的變化:

 if (textBox1.Text.Length > 1) 
     { 
      var query = from eq in db.equipments 
         where eq.SerNo == serial 
         select eq; 

      foreach (equipment equip in query) 
      { 
       equip.Loc = textBox1.Text; 
       equip.Owner = "Evisive"; 
       equip.Status = updatedStatus; 
       equip.SystemName = ""; 
      } 

      db.SubmitChanges(); 
     } 

     else 
     { 
      MessageBox.Show("Enter a Destination"); 
     } 

再次,部分作品(改變數據庫中的數據)。下面是我嘗試更新表格的部分(看似不起作用的部分):

public void Update_EquipmentGrid() 
    { 
     BindingSource b = new BindingSource(); 
     b.DataSource = from eq in db.equipments 
         select eq; 
     dataGridView2.DataSource = b; 
    } 

這是不是更新表格的正確方法嗎?

回答

0

嘗試

dataGridView2.DataSource = null; 

dataGridView2.DataSource = b; 

也可以嘗試將數據分配之前上市。

b.DataSource = (from eq in db.equipments 
       select eq).ToList(); 
+0

第一個建議似乎沒有任何效果,第二個禁用DataGridView的搜索功能。 – user1751215 2013-05-01 16:15:02

+0

db.equipments的返回類型是什麼?它是否可枚舉<>? AutoGenerateColumns屬性是否也設置爲true? – 2013-05-01 16:19:24

+0

不知道如何找到。當我將鼠標懸停在上面時,它被列爲System.Data.Linq.Table InventoryDataContext設備。是的,AutoGenerateColumns屬性爲true。 – user1751215 2013-05-01 16:27:11

4

想通了。這個鏈接解釋它。

http://msdn.microsoft.com/en-us/library/Bb386982(v=vs.110).aspx

代碼應該是:

 InventoryDataContext dba = new InventoryDataContext(); 

     BindingSource b = new BindingSource(); 
     b.DataSource = from eq in dba.equipments 
         select eq; 

     dataGridView2.DataSource = b; 

不知道爲什麼,但你需要創建的DataContext的一個新實例每次更新時。