使用LINQ的自定义Object的ListView.AddRange

时间:2013-10-14 17:55:32

标签: .net vb.net winforms linq listview

我有一个像这样的自定义对象:

    Dim Contacts As New List(Of Contact)

    Dim CurrentContact As Contact = New Contact With { _
        .Name = "Manolo", _
        .Country = "Spain", _
        .City = "Valencia"}

    Contacts.Add(CurrentContact)

成员变量只是字符串:

<Serializable()> _
Public Class Contact

#Region "Member Variables"

Private mId As System.Guid
Private mName As String
Private mCountry As String
Private mCity As String

#End Region

End Class

现在我有一个 Listview ,其中设置了“详细信息”模式,并且有3列,如下所示:

 Name Column        |  Country Column       | City Column
 ------------------------------------------------------------------
 (Here goes Item)   | (Here goes Subitem 1) | (Here goes Subitem 2)

我的问题, 我如何使用LINQ直接转换所需列中的每个值?结果就是这样:

 Name Column        |  Country Column       | City Column
 --------------------------------------------------------
 Manolo             |  Spain                | Valencia
 Next contact Name  |  Next contact Country | Next contact City
 Next contact Name  |  Next contact Country | Next contact City
 etc...

我尝试将对象转换为“ ListViewItem ”,“ ListviewGroup ”和“< strong> ListView.ListViewItemCollection “但没有任何效果,我做错了,例外情况说”类型'联系人'的值无法转换为字符串 “:

ListView1.Items.AddRange(Contacts.Select(Function(x) New ListViewGroup(x)).ToArray)

这个别人抛出一个“类型'联系'的值'无法转换为ListViewGroup

ListView1.Items.AddRange(Contacts.Select(Function(x) New ListViewItem(x)).ToArray)

1 个答案:

答案 0 :(得分:1)

以下是如何操作,你必须将一个字符串数组数组传递给AddRange函数:

ListView1.Items.AddRange(Contacts.Select(Function(listElement) new ListViewItem(new string() { listElement.Name, listElement.Country, listElement.City })).ToArray())

不确定哪个没有测试,我现在无法测试。

请参阅此问题:Populating a listview multi-column