Как удалить привязки DataGridViewComboBoxCell из dataGridView?

125
30 декабря 2020, 07:00

Нужно сделать сброс dataGridView1 в начальное состояние, т. е удалить все строки и вставить новые изначальные.

Во время вставки изначальных строк ошибка:

ячейки с DataGridViewComboBoxCell уже принадлежат сетке.

Как очистить привязки DataGridViewComboBoxCell в dataGridView ?

dataGridView1.Rows.Clear();
dataGridView1.DataSource = null;
//  dataGridView1.DataMember=null;
dataGridView1.DataBindings.Clear();
dataGridView1.RowTemplate.Cells.Clear();           
long totalMemory = GC.GetTotalMemory(false);
GC.Collect(0, GCCollectionMode.Forced);

Заполнение сетки dataGridView1:

DataGridViewComboBoxCell CB1 = new DataGridViewComboBoxCell();
dataGridView1.Rows.Add(null, "Обозначение ЛЭП");
dataGridView1.Rows.Add(null, "для кабелей напряжением, кВ");
CB1.Items.AddRange("0.5", "3", "6");
dataGridView1[5, 7] = CB1;
CB1.Value = "0.5";
dataGridView1[5, 7] = CB1;//строка с ошибкой

System.InvalidOperationException: Указанная ячейка уже принадлежит к сетке. Выполнение операции невозможно. в System.Windows.Forms.DataGridViewCellCollection.set_ltem(lnt32 index, DataGridViewCell value) в System.Windows.Forms.DataGridView.set_ltem(lnt32 columnindex, Int32 rowindex, DataGridViewCell value)

Answer 1

Во-первых, вы не используете привязку данных (data binding). Вы работаете напрямую со строками и ячейками датагрида.

Соответственно, очищать нужно именно строки:

dataGridView1.Rows.Clear();

Всё, больше ничего не нужно.

Если бы использовалась привязка:

dataGridView1.DataSource = someCollection;

тогда очистка производилась бы так:

dataGridView1.DataSource = null;
Answer 2
  dataGridView1[5, 7] = CB1;
    CB1.Value = "0.5";

Тут уже недопустимое значение вылетает. (Должен быть типа
ObjectCollection : IList, ICollection, IEnumerable)

dataGridView1[5, 7] = CB1;

Тут повторно пытаетесь присвоить ссылку на тот же объект. Можно присвоить на НОВУЮ ячейку:

new DataGridViewComboBoxCell()...

или работать с тем же списком CB1.Items, значит, чтоб его перезаписать: его и надо очистить сперва:

CB1.Items.Clear();
READ ALSO
Принципы ООП в С# [закрыт]

Принципы ООП в С# [закрыт]

Хотите улучшить этот вопрос? Переформулируйте вопрос так, чтобы на него можно было дать ответ, основанный на фактах и цитатах

119
MySql большое количество Rows examined

MySql большое количество Rows examined

У меня вопрос к спецам по MySqlВ логе медленных запросов есть вот такой запрос:

124
Группировка сообщений в MySql-запросе

Группировка сообщений в MySql-запросе

Прошу помощи в создании запросаНеобходимо при выборке сообщений с базы данных сгруппировать их

132
Facebook Error: 'Cross-site request forgery validation failed. Required param \“state\” missing from persistent data'

Facebook Error: 'Cross-site request forgery validation failed. Required param \“state\” missing from persistent data'

После авторизации на странице Facebook переходит на указанную страницу сайта, где при попытке получить accessToken приходит ошибка от Facebook: 'Cross-site...

102