使用Visual Studio 2015并使用SQlite + Entity(WPF应用程序)学习ORM
我的数据库包含字段:ID和ShipType
我可以使用ShypType字段填充listView:
private void button_Click(object sender, RoutedEventArgs e)
{
List<string> shipList = new List<string>();
using (var db = new ImperialFleetDBEntities())
{
shipList = (from g in db.ShipsType select g.ShipType).ToList();
db.Dispose();
}
listView.Items.Clear();
foreach (string str in shipList)
{
listView.Items.Add(str);
}
}
但我无法想象如何显示ID字段(本例中的g.ID)
在此链接C# ListView Display中,解决方案正在使用ListViewSubItems
但如果我输入listView。我没有任何SubItems选项
解决方案是5岁,也许这就是问题?
答案 0 :(得分:1)
最简单的方法可能是:
private void button_Click(object sender, RoutedEventArgs e)
{
using (var db = new ImperialFleetDBEntities())
{
listView.Items.Clear();
foreach(var item in (from g in db.ShipsType select new { ID = g.ID, ShipType = g.ShipType }))
{
listView.Items.Add(item)
}
}
}
这应该以正确的方式填充listView,并确保EF不会跟踪这些新对象。
如果您愿意,可以创建完整的类,例如包含所需字段的ListView的ViewModel,然后选择它们:
foreach(var item in (from g in db.ShipsType select new NewShipType { ID = g.ID, ShipType = g.ShipType }))
{
listView.Items.Add(item)
}
或使用构造函数(如果你创建一个)。
使用seprate ViewModel,您当然可以使用中间列表对象并清除并将它们添加到listView.Items,这对于匿名对象是不可能的。
顺便说一下,你没有,也许你不应该在db.Dispose()
子句中写using
,因为using
正是为了确保内部的对象被处理掉 - 您无法在未实现using
接口的对象上使用IDisposable
。