Как исправить ошибку «Строки нельзя программным способом добавить в коллекцию строк DataGridView, если элемент управления привязан к данным.»?
Есть форма, на ней два DataGridView: первый берет данные из реестра и заполняется при загрузке формы, второй пустой и в него мы переносим строки из первого. При переносе с первого во второй все работает как нужно, а при переносе из второго в первый вылазит ошибка
Строки нельзя программным способом добавить в коллекцию строк DataGridView, если элемент управления привязан к данным.
Как ее исправить?
Вот сама форма:

Кнопка "Добавить в список" работает как надо, а вот "Удалить из списка" нет, вот ее код:
private void minus_program_Click(object sender, EventArgs e)
{
foreach (DataGridViewRow row in Yes_white.SelectedRows)
{
object[] items = new object[row.Cells.Count];
for (int i = 0; i < row.Cells.Count; i++)
{
items[i] = row.Cells[i].Value;
}
Not_white.Rows.Add(items);
Yes_white.Rows.Remove(row);
}
}
Ошибка вылазит вот на этой строчке:
Not_white.Rows.Add(items);
Как исправить данную ошибку?
Ответы (1 шт):
Схематично покажу
Берете 2 листа
private readonly BindingList<ВашТипДанных> list1 = new BindingList<ВашТипДанных>();
private readonly BindingList<ВашТипДанных> list2 = new BindingList<ВашТипДанных>();
Закидываете в DataSource, можно даже в конструкторе формы однократно это сделать.
dataGridView1.DataSource = list1;
dataGridView2.DataSource = list2;
Затем заполняете их как нужно в методе загрузки данных.
Чтобы перекинуть выделенный элемент из списка 1 в список 2, достаточно сделать
if (dataGridView1.SelectedRows.Cast<DataGridViewRow>().FirstOrDefault()?.DataBoundItem is ВашТипДанных item)
{
list1.Remove(item);
list2.Add(item);
}
Всё, больше ничего не надо. Обратная операция выглядит точно так же.