Таблица данных + удалить строку в C # с помощью цикла - PullRequest
12 голосов
/ 30 июня 2010

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

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

Я даже пробовал вне if if и снаружи 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();                                       
    }

}

Ответы [ 3 ]

18 голосов
/ 30 июня 2010

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

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

9 голосов
/ 30 июня 2010

Создайте список строк, которые нужно удалить, итерируя по 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();
1 голос
/ 06 декабря 2012

Вот как я это сделал, когда столкнулся с этой проблемой.

            Dim index As Integer = 0
            Dim count As Integer = resultsDT.Rows.Count - 1
            For i As Integer = 0 To count
                If resultsDT.Rows(index).Item("something") = "something" Then
                    resultsDT.Rows(index).Delete()
                    resultsDT.AcceptChanges()
                    index = index - 1
                End If

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