代码之家  ›  专栏  ›  技术社区  ›  Thorin Oakenshield

如何在C#winforms中从字典格式的ListView获取数据

  •  1
  • Thorin Oakenshield  · 技术社区  · 14 年前

    我有一个 ListView 像控制一样

    listview

    以及 Dictionary

    Dictionary<String,List<String>> MyDict
    

    列表视图

    { "S.No."  { "1","2","3" } }
    {" A" {"A1", "", "" } }
    {" B" {"B1", "B2", "" } }
    {" C" {"C1", "C2", "C3" } }
    

    使用嵌套for循环我们可以做到这一点。但是有没有办法用LINQ来实现呢?

    1 回复  |  直到 14 年前
        1
  •  3
  •   Thomas Levesque    14 年前

    使用 ToDictionary 方法:

    Dictionary<string, List<string>> dict =
        listView.Items
                .Cast<ListViewItem>()
                .ToDictionary(
                    item => item.Text,
                    item => item.SubItems
                                .Cast<ListViewItem.ListViewSubItem>()
                                .Select(subItem => subItem.Text)
                                .ToList());
    

    好吧,我看错了问题。。。这应该有效:

    Dictionary<string, List<string>> dict =
        listView.Columns
                .Cast<ColumnHeader>()
                .ToDictionary(
                    c => c.Text,
                    c => listView.Items
                                 .Cast<ListViewItem>()
                                 .Select(i => i.SubItems[col.Index].Text)
                                 .ToList());
    

    (这是因为索引0处的子项实际上是拥有其他子项的子项)