2013-05-01 44 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的一个新实例每次更新时。