Как удалить несколько строк в DataTable?

То, как я могу удалить определенный DataRows в цикле DataTable строки, которые удовлетворяют пользовательскому условию - позволяет, говорят что строки, имеющие индекс четного числа-? (Не используя LINQ)

Спасибо

30
задан pencilCake 26 May 2010 в 13:08
поделиться

4 ответа

Это зависит от того, что вы подразумеваете под словом «удалить».

Если вы имеете в виду пометить их как удаленные , просто вызовите метод Delete () для каждой строки, когда вы посещаете ее в своем цикле. Затем вам нужно вызвать AcceptChanges () в таблице данных, чтобы завершить удаление - предположительно после обновления вашей базы данных (если таковая имеется).

foreach( DataRow row in someTable.Rows )
{
    if( /* your condition here */ )
        row.Delete();
}
someTable.AcceptChanges();

Если вы имеете в виду удалить его из DataTable, то вам нужно сделать это за два прохода:

List<DataRow> rowsToDelete = new List<DataRow>();
foreach( DataRow row in someTable.Rows )
{
    if( /* your condition here */ )
    {
        rowsToDelete.Add( row );
    }
}

foreach( DataRow row in rowsToDelete )
{
    someTable.Rows.Remove( row );
}

Стоит отметить, что вы всегда можете использовать первый метод для удаления строк, поскольку помеченные строки как Deleted , а затем принятие изменений автоматически удалит их из таблицы. Но иногда более понятно и эффективно просто удалить объекты DataRow из коллекции Rows .

57
ответ дан 27 November 2019 в 23:25
поделиться

Попробуйте что-нибудь вроде этого примера

DataTable table = new DataTable();
table.Columns.Add("Foo",typeof(int));
for (int i = 0; i < 10; i++)
    table.Rows.Add(i);

for (int i = table.Rows.Count -1; i >=0; i--)
{
    // sample removes all even foos
    if ((int)table.Rows[i]["Foo"] % 2 == 0)
        table.Rows.RemoveAt(i);
}
9
ответ дан 27 November 2019 в 23:25
поделиться

попробуйте это

foreach(DataRow oRow in YourDataTable.Rows)
{
  if ("Check You Condition")
   {
      YourDataTable.Rows.Remove(oRow);
   }
}
-2
ответ дан 27 November 2019 в 23:25
поделиться

попробуйте итерировать результат Select(). Это довольно похоже на другие ответы, но я нахожу это наиболее прямым

DataRow[] r = table.Select();
for (int i = 0; i < r.Length; i++)
{
    if (i % 2 == 0)
        r[i].Delete();
}
0
ответ дан 27 November 2019 в 23:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: