2012-02-21 106 views
0

我試圖更新使用LINQ to SQL SQL表:的LINQ to SQL更新多張行

查詢使用LINQ to SQL我能夠將數據加載到一個GridView的UI在WPF應用程序數據庫。所以我有一個與每一行關聯的複選框。該表具有EmpName和Ability兩列。因此,當用戶選中與行/行關聯的複選框時,我必須將表中的值更新回sql DB中。

這裏是檢查我的複選框代碼:這裏

private void EmployeeName_Checked(object sender, RoutedEventArgs e) 
    { 
     DataDataContext dc = new DataDataContext(); 

     foreach (var item in empListView.SelectedItems) 
     { 


     EmpList updateList = (from p in dc. EmpList 
              where p.able == No 
              select p).FirstOrDefault(); 


      if(updateList.able==NO) 
      updateList.able = YES; 

     } 

     dc.SubmitChanges(); 
     empListView.ItemsSource = dc.EmpLists.ToList(); 
    } 

EmpList是當我從設計師加入linqtosql類創建的一個。所以我正在嘗試更新inturn將更改提交給數據庫的相同列表。

問題:我可以根據gridview中選中的複選框選擇行,並且能夠遍歷選定的項目,但我無法更新所有選定的行..很少有更新.. 。如果有人能夠查看代碼並指導我查詢有任何問題,我會很高興。

最終,我必須根據gridview的colum能力中的當前值更新所有選定的行。

+0

您的示例代碼不會編譯。我仍然猜測你的問題是你在每次迭代時都覆蓋datacontext。因此,您的保存電話僅作用於最後一次。 – usr 2012-02-21 21:01:23

+0

什麼是是和否? – cadrell0 2012-02-21 21:01:45

+0

@ cadrell0是和否是來自數據庫的位值。 – Macnique 2012-02-21 21:04:00

回答

0

DataDataContext DC =新DataDataContext();需要移到foreach循環之外。目前它不應該編譯,因爲它超出了範圍。我不明白你是如何將選中的項目鏈接到你從數據集中拉出的項目的,你只是拉第一個?您的物品是否有ID或要抓取的物品?

+0

是項目有ID。 – Macnique 2012-02-21 21:19:17

+0

由於您計劃在函數結束時抓取所有EmpList,所以您最好在執行foreach循環之前抓住它。這意味着只有一次從數據庫獲取,並且仍然允許您更新它們。在你的linq查詢中,從你保存的列表中選擇,並找到where item.ID == p.ID && p.able == NO。這將確保你實際上抓住了選定的一個,而不僅僅是隨機的第一個。 – 2012-02-22 16:51:25