Reden Rodriguez Ответов: 1

Как сделать множественное удаление в массиве datagridview?


У меня есть datagridview и я помещаю may array вот так

BindingList<person> p1;
private void loadgrid()
        {
            p1 = new BindingList<person>();
            p1.Add(new person() { PersonId = 1, Person_Name = "reden" });
            p1.Add(new person() { PersonId = 2, Person_Name = "anne" });
            dataGridView1.DataSource = p1;
        }

и я вызову этот метод для просмотра данных, которые я положил

и чтобы удалить каждый из массива я делаю это

private void button1_Click(object sender, EventArgs e)
        {

            p1.RemoveAt(dataGridView1.SelectedRows[0].Index);
        }

мой вопрос заключается в том, как я могу сделать многократное удаление, используя это?

Что я уже пробовал:

я попробовал это сделать, но ничего не вышло
foreach (DataGridViewCell oneCell in dataGridView1.SelectedCells)
                {
                    p1.RemoveAt(dataGridView1.SelectedRows[0].Index);
                }   

1 Ответов

Рейтинг:
2

RickZeeland

Я думаю, что ваш код должен быть таким:

foreach (DataGridViewRow row in dataGridView1.SelectedRows)
{
    if (!row.IsNewRow)
    {
        dataGridView1.Rows.Remove(row);
    }
}


Richard Deeming

В зависимости от того, как он реализован, это может привести к "коллекция была изменена" исключение, так как SelectedRows основано на Rows, и вы изменяете эту коллекцию в цикле.

Я был бы склонен трахнуть а .ToList() там, чтобы избежать этой проблемы:

foreach (DataGridViewRow row in dataGridView1.SelectedRows.ToList())

RickZeeland

Ну, я сделал быстрый тест, используя XML-источник данных, и это сработало.
Но я думаю, что лучшим подходом было бы удалить элементы из списка привязок ...

Richard Deeming

Это интересно. Исчезает ли строка, которую вы только что удалили из списка SelectedRows коллекция? И если у вас есть более одной выбранной строки, делает ли это SelectedRows коллекция все еще перебирает их все?

RickZeeland

На данный момент у меня нет моего тестового кода, но я проверю его завтра, обещаю :)

RickZeeland

Я могу подтвердить, что удаленная строка исчезает из коллекции SelectedRows.
Единственная проблема, которую я обнаружил, была с выбранной нижней новой строкой, поэтому я обновил решение, чтобы исправить это.