在不使用循环的情况下更新C#中的DataTable?

问题描述:

让假设有三列在我的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

你可以使用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

你可以这样做:

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

// 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

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