繁体   English   中英

C#-SQlite +实体-在ListView上显示项目

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM