[英]C# - SQlite + Entity - Show items on a ListView
使用Visual Studio 2015并通过SQlite + Entity学习ORM(WPF应用程序)
我的数据库包含以下字段: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显示解决方案正在使用ListViewSubItems
但是如果我键入listView。 我没有任何SubItems选项
解决方案已有5年历史了,也许那是个问题??
最简单的方法可能是:
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不会跟踪这些新对象。
如果愿意,您可以创建完整的类,例如ViewModel for listView包含所需的字段,然后选择它们:
foreach(var item in (from g in db.ShipsType select new NewShipType { ID = g.ID, ShipType = g.ShipType }))
{
listView.Items.Add(item)
}
或使用构造函数(如果您使用一个)。
使用单独的ViewModel,您当然可以在列表对象之间使用它们,并将它们清除并将其添加到listView.Items中,而匿名对象则不可能。
顺便说一下,您没有,也许您不应该在using
子句中编写db.Dispose()
,因为using
正是要确保内部对象已被处置-您不能在未实现的对象上使用using
IDisposable
接口。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.