【问题标题】:ListView.AddRange of custom Object using LINQ使用 LINQ 的自定义对象的 ListView.AddRange
【发布时间】:2013-10-22 08:52:47
【问题描述】:

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

    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”和“ListView.ListViewItemCollection”但没有任何效果,我做错了什么,异常显示“'contact' 类型的值无法转换为字符串 ":

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

这会抛出“'contact' 类型的值不能转换为 ListViewGroup

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

【问题讨论】:

    标签: .net vb.net winforms linq listview


    【解决方案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

    【讨论】:

    • 感谢您的回答,但我不明白,我尝试测试代码但不起作用,我没有设置任何 listviewitem,我需要添加一个范围(一个 List(的联系人))到一个空的列表视图,它有 3 列,并且对象有 3 个成员(contact.name、contact.country、contact.city),如果您需要更多信息,请告诉我用“联系人”更新问题" 类内容,但我告诉你,类只有字符串属性和成员。 PS:原谅我的英语
    • 你能说得更具体点吗?
    • @ElektroHacker - 见编辑。又看了一遍文档
    • 再次感谢您,但它不会不起作用,我向您显示异常消息:重载解析失败,因为无法使用这些参数调用可访问的“AddRange”:“一维数组”类型的值的一维字符串数组的'不能转换为'System.Windows.Forms.ListView.ListViewItemCollection'。
    • 第二个代码运行良好,感谢您的宝贵时间,答案非常有用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多