簡體   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