链接视图列表/列表删除选定的项目

本文关键字:列表 项目 删除 视图 链接 | 更新日期: 2023-09-27 17:53:16

我在下面有点不清楚,所以为了澄清一些事情,我的最终目标是创建一个按钮来删除显示在列表视图中的值,该值是一个列表项。

这就是我想要的那种东西。
studentList.Remove(listView1.SelectedIndices);
refreshList(); 

当然,如果这工作,我将在天堂,但它抛出错误,当然…

列表是private List<Student> studentList = new List<Student>(),它是从另一个windows表单生成的。

我有一个问题,从我正在使用的列表/视图列表中删除项目。

下面是不断抛出错误的代码:

private void buttonDelete_Click(object sender, EventArgs e)
{
    // studentList.RemoveAt(listBoxStudent.SelectedIndex);
    for (int i = 0; i < listView1.Items.Count; i++)
    {
        studentList.RemoveAt(listView1.Items[i].Selected));
        i--;
    }
    refreshList();
}

值被正确地放入列表视图,但我似乎无法找到一种方法来从列表视图和列表一起删除值(refreshlist()清除并根据列表studentList重新填充列表视图)

private void refreshList()
{
    listView1.Items.Clear();
    foreach (Student stu in studentList)
    {
        string[] filler = new string[5];
        filler[0] = stu.Name.ToString();
        filler[1] = stu.Residency.ToString();
        filler[2] = stu.Credits.ToString();
        filler[3] = stu.Tuition.ToString();
        listView1.Items.Add(stu.Id.ToString()).SubItems.AddRange(filler);
        listView1.View = View.Details;
    }
}

edit:添加refreshlist()

链接视图列表/列表删除选定的项目

Chris,

老兄,只要从列表中删除对象(忘记RemoveAt(index)),然后刷新视图…它将(或者至少它应该)从"模型"(即学生列表)中获取更改。

列表。删除方法:http://msdn.microsoft.com/en-us/library/cd666k3e.aspx

欢呼。基斯。

尝试将循环设置为

            for(int i = studentList.Items.Count -1; i>=0; i--)
            {
                if(studentList.Items[i].Selected == true)
                    studentList.Items[i].Remove();
            }

或以另一种方式

            foreach (ListViewItem lvi in studentList.Items)
            {
                if (lvi.Selected == true)
                    lvi.Remove();
            }

您通常不会尝试同时操作。修改底层数据源(在本例中为studentList),然后更新ListView。如果你修改你的studentList使用ObservableCollection,它实际上会为你更新UI。

此外,如果您的集合的数据类型支持IComparable,您应该能够使用listView1.Remove(),而不是RemoveAt()。

您正在更改尝试遍历的集合。一旦你删除了第一项,你就改变了列表,所以for循环会给你一个错误。给出的向后迭代(i——)的示例是解决问题的一种方法。