2011-08-24 8 views
9

私は4つの列を持つDataTableを持っています。私は第3列の値を "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

OK、ちょうど1つの質問 - なぜループしませんか? – 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を知っていれば、SelectまたはFind(正確には覚えていないが、Selectだと思う)を使って簡単にフィルタすることができます。一度行があれば、列の値を割り当てることができます。

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); 
関連する問題