Как изменить значение столбца DataTable без циклов? - PullRequest
9 голосов
/ 24 августа 2011

У меня есть DataTable, который имеет 4 столбца. Я хочу изменить значение 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

Как этого добиться без зацикливания? Любые предложения, пожалуйста.

Ответы [ 4 ]

13 голосов
/ 24 августа 2011

Как насчет этого? ↓ без петли ....

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();
}
2 голосов
/ 18 февраля 2015

Вы можете использовать простой трюк здесь.Удалите строку и повторно добавьте ее в таблицу.

 dt.Columns.Remove("Value");
 dt.Columns.Add("Value", type(System.Int32), 0);
2 голосов
/ 24 августа 2011
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

1 голос
/ 24 августа 2011

Если вы знаете идентификатор, вы можете просто отфильтровать его, используя Select или Find (точно не помню, но я думаю, что это Select), когда у вас есть строка, вы можете назначить значения столбцов.

Я уверен, что есть и лучший LINQ-ориентированный способ, но этот подход ADO.NET/System.Data старой школы должен работать в любом случае.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...