2013-05-01 2 views
1

Впервые я работал с LINQ, и у меня возникла странная проблема. Я использую MS SQL 2008. Если я изменяю строку и SubmitChanges(), я могу видеть изменения в SQL Server Management Studio, но когда я запрашиваю, чтобы пополнить мои данныеGridViews обновленной информацией, я получаю старую версию данные.Linq to SQL: Обновление данныхGridView после SubmitChanges не работает

Ниже приводится изменение моих данных:

 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

+0

Каков тип возврата db.equipments? Перечисляется ли оно <>? Также установлено свойство AutoGenerateColumns равным true? –

+0

Не знаете, как это найти. Когда я навис над ним, он указан как System.Data.Linq.Table InventoryDataContext equipments. И да, свойство AutoGenerateColumns истинно. – user1751215

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 каждый раз, когда он обновляется.

Смежные вопросы