Есть 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.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
До сегодня не доводилось часто сталкиваться с перегрузкой, прошу помощи с этим
Впервые сел за этот движок и нашел скрипт для свободной камеры, так вот мне нужно её ограничить по осям z, y, и xТк я не хочу что-бы объект вылетал...
В таблице размером 3x3, проставлены в произвольном порядке цифры от 1 до 9Требуется последовательно обойти все элементы этой таблицы таким...
проект webapi на C#