如何从列表框删除选定的元素并更新列表框(BindingList)

时间:2019-04-28 17:39:53

标签: c# winforms

我已经阅读了几个小时的SO帖子,并尝试了不同的操作(例如刷新和设置为null等),这就是我的工作重点。

我有一个人类类,并有多个人类分支继承它。像儿童,成人,少年一样。它们都具有“名称”,“年龄”,“生日”属性,诸如此类。

所以我有两个列表,分别代表现在和过去的人类:

BindingList<Human> presentBind
BindingList<Human> pastBind

和两个列表框:

viewHumansBox
removeHumansBox

我创建了一种使用这些数据源初始化ListBoxes的方法。在Form1()中的InitializeComponent之后调用它:

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

因此,表单中的一个面板将新人类添加到viewHumansBox并通过.Add通过Add按钮将removeHumansBox移除。这样就可以很好地工作,并且人员可以填充列表(我在ToString()上进行了覆盖,因此它只在ListBoxes中显示其名称,而其他统计信息则在选中时显示在标签旁边)。

我有一个消除人的小组。它显示一个ListBox和一个Remove按钮。如您在此处看到的,removeHumansBox由presentBind填充。当您在ListBox中选择一个Human并按remove时,ListBox应该会自动更新,并且Human应该从viewHumansBox和removeHumansBox中消失。

我无法更新它,或者可能无法正确删除。现在我刚刚尝试过:

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完全保持不变。

0 个答案:

没有答案