【发布时间】:2021-10-30 12:07:30
【问题描述】:
初始化类人员列表
List<Staff> sList = new List<Staff>();
这是有错误的函数。该功能将被添加到按钮功能中,以显示更新的数据,例如在编辑或制作新员工后,它会自动更新列表框。
public void Reload()
{
lboxStaff.Items.Clear();
lboxStaff.Items.AddRange(sList.ToArray());
}
该错误特别突出了“sList.ToArray()”部分。错误内容为“论点 1:无法从 'Assignment_1.Staff[]' 转换为 'System.Windows.Form.ListViewItem[]'
我以前做过这种事情,隐约记得必须使用 .ToArray() 函数,但这似乎不起作用。我也尝试过使用 .ToList() 并仅使用 sList 没有任何功能,但这些都不起作用。
不确定这是否相关,但该类是部分公开的。
【问题讨论】:
-
A ListViewItem 它是 ListView 控件使用的 Type,而不是 ListBox。您不能使用
AddRange()添加自定义对象数组,您需要构建一个ListViewItem[]数组。或者使用 ListBox 并将您的List<Staff>设置为 DataSource;还指定一个 DisplayMember 和 ValueMember 属性。 -
谢谢你,吉米。您的评论让我意识到我不小心使用了 ListView 而不是 Listbox。
-
如果你想更新你的ListBox,你可能更喜欢
BindingList<Staff>,或者使用BindingSource并将List<Staff>设置为其DataSource,然后将BindingSource设置为ListBox的DataSource。然后让你的Staff类实现INotifyPropertyChanged。之后,如果您将新的Staff对象添加到列表中或更改Staff实例的属性值,则 LIstBox 将立即反映更改。不需要lboxStaff.Items.Clear();之类的东西
标签: c# winforms listview listbox visual-studio-2019