2011-08-24 35 views
9

我有一個DataTable有4列。我想將第三列的值更改爲「0」。 以下是我的DataTable。如何更改沒有循環的DataTable列值?

ID    Name   Value  Type 
----   ----   -----  ----- 
1    Sam    250  2 
2    Rai    324  3 
3    Tim    985  8 

我要的結果應該是象下面這樣:

ID    Name   Value  Type 
----   ----   -----  ------ 
1    Sam    0   2 
2    Rai    0   3 
3    Tim    0   8 

如何實現這一點沒有循環?任何建議請。

+0

可能重複:http://stackoverflow.com/questions/5063551/set-value-for-all-rows-in-a-datatable-without-for-loop – Waqas

+0

@Waqas:但是他們太曾使用foreach ... – thevan

+0

行,只有一個問題 - 爲什麼不循環? – Michael

回答

13

這個怎麼樣? ↓無環....

static void Main(string[] args) 
{ 
    DataTable table = new DataTable(); 

    table.Columns.Add("col1"); 
    table.Columns.Add("col2"); 

    table.Rows.Add(new object[] { "1", "1" }); 
    table.Rows.Add(new object[] { "1", "1" }); 
    table.Rows.Add(new object[] { "1", "1" }); 
    table.Rows.Add(new object[] { "1", "1" }); 

    foreach (DataRow row in table.Rows) 
     Console.WriteLine(row["col2"].ToString()); 

    Console.WriteLine("***************************************"); 

    DataColumn dc = new DataColumn("col2"); 
    dc.DataType = typeof(int); 
    dc.DefaultValue = 0; 

    table.Columns.Remove("col2"); 
    table.Columns.Add(dc); 

    foreach (DataRow row in table.Rows) 
     Console.WriteLine(row["col2"].ToString()); 


    Console.ReadKey(); 
} 
+0

我從上面的代碼中得到了答案。非常感謝。 – thevan

1

如果您知道ID,您可以使用選擇或查找(不記得準確但我認爲是選擇)來篩選它,一旦有了該行,就可以分配列值。

我相信也有一個更好的LINQ導向的方式,但這個老派的ADO.NET/System.Data方法應該無論如何應該工作。

+0

但是,Select僅用於通過提供其列值來過濾數據表。如何將所有列值的值設置爲「0」? – thevan

+0

非常感謝你對我的問題作出的寶貴貢獻。 – thevan

2
DataRow[] rows = myDataTable.Select("id = 'myIdValue'); 
//If you don't want to select a specific id ignore the parameter for select. 

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

DataTable.Select Method

+0

非常感謝你對我的問題作出的寶貴貢獻。 – thevan

1

你可以在這裏使用一個簡單的一招。刪除行並重新將其添加到表中。

dt.Columns.Remove("Value"); 
dt.Columns.Add("Value", type(System.Int32), 0);