Есть DataGridView (c# winforms vs2010 net4.0), в который добавляется строка (по одной):
private void btn_AddRow_Click(object sender, EventArgs e)
{
int index = dGV.Rows.Count;
index++;
dGV.Rows.Add();
int nRowIndex = dGV.Rows.Count - 1;
string[] ListGroups = listBox1.Items.OfType<string>().ToArray();
DataGridViewComboBoxCell Col1 = (DataGridViewComboBoxCell)dGV.Rows[nRowIndex].Cells[0];
Col1.DataSource = ListGroups;
}
К колонке1 (Col1) привязывается список ListGroups, который формируется на основе списка контрола listBox1. В колонке1 выбрано значение. Далее я меняю (код btn_Groups_Click) содержимое списка listBox1 (например, удаляю значение-строку которая выбрана в колонке1). В результате происходит ошибка.
private void btn_Groups_Click(object sender, EventArgs e)
{
Form4 frm4 = new Form4();
if (frm4.ShowDialog(this) == DialogResult.OK)
{
string[] ListGroups = frm4.ListBox2.Items.OfType<string>().ToArray();
listBox1.Items.Clear();
listBox1.Items.AddRange(ListGroups);
DataGridViewComboBoxColumn column1 = (DataGridViewComboBoxColumn)dGV.Columns[0];
column1.DataSource = null;
column1.DataSource = ListGroups;
}
frm4.Close();
frm4.Dispose();
}
Подскажите пожалуйста, как в таком случае удалить (возможно с оповещением пользователя что такое-то значение уже отсутствует) из колонки1 уже отсутствующее значение и выполнить перепривязку к измененному listBox1?
Это не ответ, потому что в вопросе недостаточно данных для него. Надеюсь, постепенно мы к нему придём.
Пока я проведу небольшой код-ревью.
В первом методе у вас есть неиспользуемая переменная index. Она создаётся, инкрементируется, но далее не используется. Можно выкинуть?
Метод DataGridView.Rows.Add() возвращает индекс добавленной строки. Логично использовать его:
int index = dGV.Rows.Add() - 1;
Нейминг. Он ужасен. Смотрите Naming Guidelines
ListGroups - переменные именуются в виде camelCase: listGroups.
Col1 - это же DataGridViewComboBoxCell - ячейка, а не колонка. Я бы назвал cell.
listBox1 - о чём говорит эта цифра 1? Ни о чём. Дайте говорящее название, что-то вроде listBoxGroups или что там у вас в этом листбоксе.
btn_AddRow - нормальное название: "Добавить строку", можно оставить.
btn_Groups - не совсем понятно, что именно делает кнопка: показывает (show), редактирует (edit), удаляет (delete/remove)? Имя должно это отражать.
Form4, frm4 - аналогично, что значит 4? Судя по коду, там идёт работа с какими-то группами. FormGroups или GroupEditingForm (форма редактирования групп), не?
column1 - я бы назвал её либо просто column, либо добавил суть: columnGroup и т. п.
В одних местах у вас используется привязка данных: DataSource = ..., в других местах работа напрямую с контролом: Items.OfType, Items.AddRange.
Правильнее было бы завести коллекцию, в которой хранятся данные. И эту коллекцию использовать и для привязки данных к GUI-контролам, и для передачи в другие методы/формы.
Удаление/добавление элементов тоже делается в этой коллеции - благодаря привязке данных изменения будут автоматически отображаться в GUI.
Продвижение своими сайтами как стратегия роста и независимости