2011-05-21 109 views
9

讓假設有三列在我的DataTable在不使用循環的情況下更新C#中的DataTable?

  1. 代碼

  2. 顏色

如果我知道的代碼和名稱,我該怎麼更新該代碼和名稱符合我的標準的特定行的顏色?我想在不使用循環的情況下做到這一點

+3

爲什麼在這個世界上你不想使用循環來做到這一點? *某處*,需要循環。即使你使用LINQ,循環仍然在內部執行。 – 2011-05-21 14:44:58

+0

科迪,OP想更新1排。字典不需要循環。 – 2011-05-21 20:20:54

+0

表格不是字典 – 2012-12-19 22:49:20

回答

13

你可以使用LINQ:

DataRow dr = datatable.AsEnumerable().Where(r => ((string)r["code"]).Equals(someCode) && ((string)r["name"]).Equals(someName)).First(); 
dr["color"] = someColor; 

當然,我假設所有這些標準都是字符串。您應該將演員改爲正確的類型。

+0

現在我在Data.EnumerableRowCollection不包含.First()我們只是更新行如何將在DataTable中反映出這些變化 – 2011-05-21 11:09:58

+0

確保你在使用System.Linq,但是如果沒有被引用,那麼Where()不應該工作。「反映變化」你是指看到他們在屏幕上?你需要重新綁定DataTable到任何你用來顯示它 – Farinha 2011-05-21 11:33:35

-1

你可以這樣做:

foreach (DataRow row in datatable.Rows) 
     { 
      if(row["code"].ToString() == someCode && row["name"].ToString() == someName) 

       { 
        row["color"] = someColor; 
       } 


     } 
+5

-1 - >海報清楚地說沒有循環。 – lstanczyk 2012-07-05 17:23:02

+0

-1 - >海報在他的問題中聲明不使用循環。我理解這個作品,但它已經打破了問題的標準。 – IyaTaisho 2014-08-12 14:27:20

12
// Use the Select method to find all rows matching the name and code. 
DataRow[] rows = myDataTable.Select("name 'nameValue' AND code = 'codeValue'); 

for(int i = 0; i < rows.Length; i ++) 
{ 
     rows[i]["color"] = colorValue; 
} 
+0

此更新的行將如何反映回(已提交)myDataTable – 2011-06-07 11:56:41

+0

@ Zain:這已更新。使用DataTable的Select方法來定位特定的行並將新值分配給所需的列。而已。 – CharithJ 2011-06-07 23:04:32

+0

應該是DataRow []行= myDataTable.Select(「名稱='nameValue'AND代碼='codeValue') – lstanczyk 2012-07-05 17:25:56

5
DataTable recTable = new DataTable(); 

// do stuff to populate table 

recTable.Select(string.Format("[code] = '{0}' and [name] = '{1}'", someCode, someName)).ToList<DataRow>().ForEach(r => r["Color"] = colorValue); 
+0

這仍然是一個循環 – 2017-02-01 15:58:11

相關問題