Сейчас разрабатываю приложение, которое работает с базой данных и производит вывод информации в элемент DataGridView. И на одном из этапов разработки мне понадобилось очистить весь DataGridView. Вроде бы элементарная задача, однако решить её первым возникшим у меня в голове способом мне не удалось.
Начнем с того, что метод Clear()
не работает.
dataGridView2.Rows.Clear();
Тогда на помощь приходит цикл:
int rowsCount = dataGridView2.Rows.Count;
for (int i = 0; i < rowsCount; i++) {
dataGridView2.Rows.Remove(dataGridView2.Rows[0]);
}
Либо
while (dataGridView2.Rows.Count !== 0) {
dataGridView2.Rows.Remove(dataGridView2.Rows[dataGridView2.Rows.Count - 1]);
}
Производим удаление последней записи до тех пор, пока количество записей не будет равно нулю.
Как подсказали в комментариях, происходило это потому, что вероятно был биндинг с DataSource
.
В таком случае стоит попробовать следующий вариант:
dataGridView2.DataSource = new object();
Но сейчас я бы предпочел получить BindingSource
и очистить его.
dataGridView2.DataSource.Clear();
Вот так нужно очищать DataGridView, если метод Clear() не срабатывает. Вот такой своеобразный клининг получился.
Так наверное проще будет)
[csharp]dataGridView2.Rows.Clear[/csharp]
Согласен. Только в моём случае метод Clear() не сработал.
[csharp]dataGridView1.Rows.Count = 0;[/csharp]
Сount — только на чтение
На DataGrid прицеплен DataSource?
Нет.
А если данные через DataSource, тогда .Rows.Clear() не поможет.
Тут нужно сделать вакуум в DataSource:
dataGridView1.DataSource = new object();
Не делал отладку, я вижу?
При каждом входе в цикл проверяется Count. Раз вы удаляете одну строку в каждом шаге цикла, то Count будет каждый раз уменьшаться. У вас i завязан на текущее кол-во строк. Поэтому и удаляется только половина.
1) i=0; Count=4;
2) i=1; Count=3;
3) i=2; Count=2;//И тут вы неожиданно выходите из цикла, потому что отладкой пользоваться не умеете.
Если бы вы сначала запомнили где-то Count, а потом сравнивали i с запомненным, то все было бы норм.
Да. Все верно. Проблема с этим. Вы просто молодец, что заметили проблему в статье 2011 года моих университетских времен 🙂
Основной посыл статьи в том, что метод clear ничерта не работал:)
DataTable dt = new DataTable();
dataGridView1.DataSource = dt;
profit