Вопрос DataGridView - Дублирование элементов после очистки (WinForms)

keep silence
Участник
Статус
Оффлайн
Регистрация
17 Дек 2018
Сообщения
546
Реакции[?]
201
Поинты[?]
0
На словах обьяснить сложно, поэтому приложу несколько скринов с демонстрацией проблемы.
Когда возникает проблема и в чём её суть:
1. Сначала я вручную заполняю таблицу неважно какими данными:
1641808930670.png
2. Сохраняю данные, переключаюсь на другую команду (что? см. пост)
3. При переключении на другую команду, казалось бы, всё норм. Таблица чиститься, остаются поля для создания новой строки.
4. Переключаюсь обратно на первую команду, и получаю вот это вот нечто:
1641809073208.png
- А что не так?
- Не так то, что создалась пустая строка, поля для ввода новой находятся ниже.
5. Если я попытаюсь сохранить текущее состояние, то всё на первый взгляд норм, никаких новых строчек не появилось, и даже при переключении на другую команду всё норм, но стоит только вернутся обратно, то мы получаем дубликат уже ранее имеющиеся строчек, включая пустую:
1641809225083.png
(Всё на скрин не влезло, поверьте на слово, там продублировалось вообще всё!)

Я искренне не понимаю, почему так происходит, учитывая то, что перед добавлением кнопок из другой команды я таблицу чищу. Больше всего удивляет даже не то, что создается пустая строка (при экспорте в файл я пустышки фильтрую), а почему оно блять дублируется, ведь до сохранения и переключения на другую команду всё ок.

Код (загрузка данных команды):
C#:
keyboardButtonsDataGrid.Rows.Clear();

foreach (KeyboardButton button in selectedCommand.KeyboardButtons)
{
    keyboardButtonsDataGrid.Rows.Add(button.Text, button.Data, button.IsUrl);
}

keyboardButtonsDataGrid.Refresh();
Код (сохранение):
C#:
foreach (DataGridViewRow row in keyboardButtonsDataGrid.Rows)
{
    KeyboardButton newButton = new KeyboardButton();

    if (row.Cells["TextColumn"].Value != null)
        newButton.Text = row.Cells["TextColumn"].Value.ToString();

    if (row.Cells["DataColumn"].Value != null)
        newButton.Data = row.Cells["DataColumn"].Value.ToString();

    if (row.Cells["IsUrlColumn"].Value != null)
        newButton.IsUrl = row.Cells["IsUrlColumn"].Value.Equals(true);

    BotCommandsList[currentCommandIndex].KeyboardButtons.Add(newButton);
}
 
keep silence
Участник
Статус
Оффлайн
Регистрация
17 Дек 2018
Сообщения
546
Реакции[?]
201
Поинты[?]
0
Скрытое содержимое
Форич перебирает элементы списка не по индексу, в отличие от обычного фор'а. Возможно, это имеет смысл, попробую. Но вряд-ли это спасёт от дублирования при сохранении.
В любом случае, спасибо за ответ!
 
Сверху Снизу