web-dev-qa-db-ja.com

ループせずにDataTable列の値を変更するにはどうすればよいですか?

4つの列を持つDataTableがあります。 3列目の値を「0」に変更したい。以下は私の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

ループせずにこれを達成するにはどうすればよいですか?任意の提案してください。

9
thevan

これはどう? ↓ループなし...

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();
}
13
shenhengbin

ここでは簡単なトリックを使用できます。行を削除して、テーブルに再度追加します。

 dt.Columns.Remove("Value");
 dt.Columns.Add("Value", type(System.Int32), 0);
3
Nishantha
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メソッド

2
CharithJ

iDがわかっている場合は、選択または検索を使用してそれをフィルターにかけることができます(正確には覚えていませんが、選択だと思います)。行を取得したら、列の値を割り当てることができます。

より良いLINQ指向の方法もあると私は確信していますが、この古い学校のADO.NET/System.Dataアプローチはとにかく機能するはずです。

1
Davide Piras