То, как я могу удалить определенный DataRows в цикле DataTable строки, которые удовлетворяют пользовательскому условию - позволяет, говорят что строки, имеющие индекс четного числа-? (Не используя LINQ)
Спасибо
Это зависит от того, что вы подразумеваете под словом «удалить».
Если вы имеете в виду пометить их как удаленные , просто вызовите метод 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
.
Попробуйте что-нибудь вроде этого примера
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);
}
попробуйте это
foreach(DataRow oRow in YourDataTable.Rows)
{
if ("Check You Condition")
{
YourDataTable.Rows.Remove(oRow);
}
}
попробуйте итерировать результат Select(). Это довольно похоже на другие ответы, но я нахожу это наиболее прямым
DataRow[] r = table.Select();
for (int i = 0; i < r.Length; i++)
{
if (i % 2 == 0)
r[i].Delete();
}