июня
26
2011

Сейчас разрабатываю приложение, которое работает с базой данных и производит вывод информации в элемент DataGridView. И на одном из этапов разработки мне понадобилось очистить весь DataGridView. Вроде бы элементарная задача, однако решить её первым возникшим у меня в голове способом мне не удалось. Сразу я решил создать цикл, который будет удалять первую запись:

for (int i = 0; i < dataGridView2.Rows.Count; i++)
dataGridView2.Rows.Remove(dataGridView2.Rows[0]);

Из логических рассуждений, всё вроде бы верно. Удаляется первая запись, происходит смещение: вторая становится первой, третья второй и т.д. Выполняем сие счастье столько раз, сколько записей в DataGridView у нас хранится. Однако данный код не привёл, к желаемому результату. Честно говоря я не знаю чем это объяснить, но удалились лишь 2 строки.

Вслед за первой идеей пришла вторая, начать удаление с конца, используя всё тот же цикл for.

for (int i = 0; i < dataGridView2.Rows.Count; i++)
dataGridView2.Rows.Remove(dataGridView2.Rows[dataGridView2.Rows.Count-1]);

Однако и тут логику ломало практической опровержение, удаление последней записи в DataGridView происходило подобно первому случаю. В итоге, одна запись из четырёх оставалась висеть.

Я честно говоря настолько привык использовать цикл for, что совсем забыл про while. Задайте себе вопрос: «Чему вы больше отдаёте предпочтение for или while?». Мне как-то больше по душе for.  Я это к тому, что следующий код привёл меня к желаемому результату.

while (dataGridView2.Rows.Count != 0)
dataGridView2.Rows.Remove(dataGridView2.Rows[dataGridView2.Rows.Count - 1]);

Производим удаление последней записи до тех пор, пока количество записей не будет равно нулю.
Вот так нужно очищать DataGridView, если метод Clear() не срабатывает. Вот такой своеобразный клининг получился.

Не пропустите, это тоже интересно!

К этой записи 3 комментария

  • Вадим пишет:

    Так наверное проще будет)

    dataGridView2.Rows.Clear
    • Stafox пишет:

      Согласен. Только в моём случае метод Clear() не сработал.

      • Andriy пишет:
        dataGridView1.Rows.Count = 0;

Оставить комментарий