Таблица данных + удаляет строку в c# с помощью цикла

У меня есть таблица данных, и я хочу удалить строку, вот мой код, он бросает меня исключение

foreach (DataRow row in dt1.Rows)
{
    if ((row["Name"] == "Select a Lookbook") || (row["Name"] == "Create a new Lookbook"))
    {
        row.Delete();
        dt1.AcceptChanges();
    }
}

Я даже попробовал вне, если statment и снаружи forloop все еще бросает меня ошибка какая-либо идея, как достигнуть этой задачи, это - исключение, которое я получаю:

Collection was modified; enumeration operation might not execute.

Заключительный рабочий Код:

foreach (DataRow row in dt1.Select())
{
    if ((row["Name"] == "Select a Lookbook") ||    (row["Name"] == "Create a new Lookbook"))
    {
        row.Delete();                                       
    }

}
12
задан ebram khalil 7 April 2014 в 10:58
поделиться

2 ответа

Вместо использования dt1.Rows используйте dt1.Select ()

Цель состоит не в том, чтобы использовать саму коллекцию, а в том, чтобы использовать массив строк, который не является коллекцией Rows

18
ответ дан 2 December 2019 в 05:26
поделиться

Создайте список строк, которые нужно удалить, перебирая DataTable.Rows , затем удалите их все по отдельности.

Решение без LINQ:

List<DataRow> rowsToDelete = new List<DataRow>();
foreach (DataRow row in dt1.Rows)
{
    if ((row["Name"] == "Select a Lookbook") || 
        (row["Name"] == "Create a new Lookbook"))
    {
        rowsToDelete.Add(row);
    }
}
foreach (DataRow row in rowsToDelete)
{
    row.Delete();
}
dt1.AcceptChanges();

Решение LINQ:

List<DataRow> rowsToDelete = dt1.Rows.AsEnumerable()
    .Where(row => (row["Name"] == "Select a Lookbook") || 
                  (row["Name"] == "Create a new Lookbook"))
    .Tolist();
foreach (DataRow row in rowsToDelete)
{
    row.Delete();
}
dt1.AcceptChanges();
9
ответ дан 2 December 2019 в 05:26
поделиться
Другие вопросы по тегам:

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