Как удалить выбранный элемент из ListBox и обновить ListBox (BindingList) - PullRequest
0 голосов
/ 28 апреля 2019

Я читаю ТАК сообщения за несколько часов и пробую разные вещи (например, обновление и установка на ноль и еще много чего), и вот где я нахожусь.

У меня есть класс, Человек и несколько ответвлений Человека, которые наследуют его. Как ребенок, взрослый, подросток, и тому подобное. Все они имеют общие свойства Name, Age, Birthday, и тому подобное.

Итак, у меня есть два списка, представляющих людей из настоящего и прошлого:

BindingList<Human> presentBind
BindingList<Human> pastBind

и два списка:

viewHumansBox
removeHumansBox

Я создал метод для инициализации ListBoxes с этими источниками данных. Вызывается после InitializeComponent в Form1 ():

private void Show()
{
    viewHumansBox.DataSource = null;
    viewHumansBox.DataSource = presentBind;
    removeHumansBox.DataSource = null;
    removeHumansBox.DataSource = presentBind;
}

Таким образом, одна из моих панелей в форме добавляет новых людей в ViewHumansBox и удаляет HumansBox с помощью .Добавить через кнопку Добавить. Это работает очень хорошо, и люди заполняют списки (я сделал переопределение для ToString (), поэтому он просто показывает их имена в списках, а их другие характеристики отображаются рядом с метками, когда они выбраны).

У меня есть панель для удаления людей. Он показывает ListBox и кнопку Удалить. Как вы видели там, removeHumansBox заполняется presentBind. Когда вы выбираете Человека в ListBox и нажимаете удалить, ListBox должен автоматически обновиться, и Человек должен исчезнуть из viewHumansBox и удалитьHumansBox.

Я не могу обновить его, или, возможно, он не удаляется должным образом. Прямо сейчас я только что попробовал:

private void removeButton_Click(object sender, EventArgs e) {
if (removeHumansBox.Items.Count >= 1)
{
    if (removeHumansBox.SelectedValue != null)
    {
        var items = (BindingList<Human>)removeHumansBox.DataSource;
        var item = (Human)removeHumansBox.SelectedValue;
        removeHumansBox.DataSource = null;
        removeHumansBox.Items.Clear();
        items.Remove(item);
        removeHumansBox.DataSource = items;
    }
}
else
{
    System.Windows.Forms.MessageBox.Show("None");
}
}

Я также пробовал обновлять и обновлять, так что наверняка я делаю что-то очень неправильное. Прошли часы, и я действительно могу помочь.

ListBox просто остается неизменным, когда я выбираю элемент и нажимаю кнопку «Удалить».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...