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

C# 链接视图列表/列表删除选定项目,c#,list,listview,C#,List,Listview,下面我有点不清楚,所以要想弄清楚,我的最终目标是创建一个按钮来删除listview中显示的值,该值是一个列表项 这就是我想要的那种东西 studentList.Remove(listView1.SelectedIndices); refreshList(); 当然,如果这起作用,我会在天堂,但它抛出的错误,当然 该列表是private list studentList=new list()它是从另一个windows窗体生成的 从正在使用的列表/视图列表中删除项目时遇到问题 下面是不断抛出错误

下面我有点不清楚,所以要想弄清楚,我的最终目标是创建一个按钮来删除listview中显示的值,该值是一个列表项

这就是我想要的那种东西

studentList.Remove(listView1.SelectedIndices);
refreshList(); 
当然,如果这起作用,我会在天堂,但它抛出的错误,当然

该列表是
private list studentList=new list()
它是从另一个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()

尝试将循环更改为

            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();
            }

尝试将循环更改为

            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。如果您修改学生列表以使用
可观察集合
,它实际上会为您更新UI


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

通常不会尝试同时操作这两种类型。修改基础数据源(在您的示例中为studentList),然后更新ListView。如果您修改学生列表以使用
可观察集合
,它实际上会为您更新UI



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

您正在更改尝试迭代的集合。一旦删除了第一项,您就更改了列表,因此for循环将给您一个错误。给出的向后迭代(i--)的示例是解决此问题的一种方法。

您正在更改尝试迭代的集合。一旦删除了第一项,您就更改了列表,因此for循环将给您一个错误。给出的向后迭代(i--)的示例是解决此问题的一种方法。

能否添加refreshlist()代码?另外,为什么要使用for循环来删除项目?特别是因为在循环中,您要否定i变量,所以它不会改变?添加了refreshlist(),我真的不确定删除项目的最佳方法是什么,但是由于它是一个listview,它可以选择多个项目,因此我的理解是需要一个循环。对该语言还是新手。您对包含
studentList.RemoveAt(…)
的第一个循环的目标是什么?是否只想删除所选项目?如果是这样,为什么要循环?我只想删除选定的项我不确定如何在listview中定位选定的索引…您可以添加refreshlist()代码吗?另外,为什么要使用for循环来删除项目?特别是因为在循环中,您要否定i变量,所以它不会改变?添加了refreshlist(),我真的不确定删除项目的最佳方法是什么,但是由于它是一个listview,它可以选择多个项目,因此我的理解是需要一个循环。对该语言还是新手。您对包含
studentList.RemoveAt(…)
的第一个循环的目标是什么?是否只想删除所选项目?如果是这样,为什么要循环?我只是想删除所选项目,我不确定如何在listview中定位所选索引…+1反转循环是解决跳过索引问题的一个好方法。删除ListViewItem会将学生从基础学生列表中删除吗?是的,这是一个问题。显然,我怀疑这不是好消息,但我不确定。也许我的问题不够清楚:(我正在尝试从学生列表中删除listView中选定的项。我没有尝试从listView中删除该项,因为这将在refreshlist()上重新填充)调用+1反转循环是解决跳过索引问题的一个好方法。删除ListViewItem会将该学生从基础学生列表中删除吗?是的:这是一个问题。显然我怀疑这不是好消息,但我不确定。也许我的问题不够清楚:(我正在尝试从listView中所选项目的studentList中删除该项目。我没有尝试从listView中删除该项目,因为这将在refreshlist()上重新填充)呼叫。问题是在所选索引处从列表中删除项目…当我尝试选择索引时,它会引发错误。计算出您的答案是最相关的。问题是在所选索引处从列表中删除项目…当我尝试选择索引时,它会引发错误。计算出您的答案是最相关的nt.如何在listView中删除选定项?Refreshlist将处理listView我只需要知道如何在StudentList中针对选定项进行删除…如何在listView中删除选定项?Refreshlist将处理listView我只需要知道如何在StudentL中针对选定项进行删除ist…你的意思是解释为什么你得到错误没有帮助,还是在集合中反向迭代没有帮助?在集合中反向迭代。我现在已经可以工作了,不过谢谢你。你的意思是解释为什么你得到错误没有帮助,还是在集合中反向迭代没有帮助