我在下面有点不清楚所以为了清理我的最终目标是创建一个按钮来删除列表视图中显示的值,该值是一个列表项。
这就是我想要的......
studentList.Remove(listView1.SelectedIndices);
refreshList();
当然,如果有效,我会在天堂,但它当然会引发错误......
列表是private List<Student> studentList = new List<Student>()
,它是从另一个窗体生成的。
我在从正在使用的列表/视图列表中删除项目时遇到问题。
以下是不断抛出错误的代码:
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();
}
这些值正在正确地放入listview,但我似乎无法找到一种方法从列表视图和列表中一起删除值(refreshlist()
根据列表{{1}清除并重新填充列表视图})
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;
}
}
。
答案 0 :(得分:2)
尝试将循环更改为
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();
}
答案 1 :(得分:2)
克里斯,
老兄,只需从列表中删除对象(忘记RemoveAt(索引)),然后刷新视图...它将(或至少它应该)拾取“模特”(即学生名单)的变化。
List.Remove方法:http://msdn.microsoft.com/en-us/library/cd666k3e.aspx
干杯。基思。
答案 2 :(得分:1)
你通常不会试图操纵它们。修改基础数据源(在您的情况下,为studentList),然后更新ListView。如果您修改studentList以使用ObservableCollection
,它实际上会为您更新UI。
此外,如果您的集合的数据类型支持IComparable
,您应该只能使用listView1.Remove(),而不是RemoveAt()。
答案 3 :(得分:0)
您正在更改要尝试迭代的集合。删除第一项后,您已更改了列表,因此for循环将显示错误。给出向后迭代(i--)的例子是解决问题的一种方法。