Windows窗体 - 如何按列名访问ListView的子项?

时间:2011-06-09 00:54:59

标签: vb.net listview

我试过这个,但它给了我'System.NullReferenceException':

    For Each MyListViewItem As ListViewItem In MyListView.Items
        MsgBox(MyListViewItem.SubItems("MyColumn").Text)
    Next

这些代码行有效(很奇怪!):

    For Each MyListViewItem As ListViewItem In MyListView.Items
        MsgBox(MyListViewItem.SubItems(0).Text)
    Next

但我需要按列名访问它们。

我发现这段代码给了我空白的子项名称

For Each MyListViewItem As ListViewItem In MyListView.Items
    MsgBox(MyListViewItem.SubItems(0).Name)
Next

请注意,我在设计时添加了列。在运行时的项目:

    While Reader.Read
        Dim SubItems(2) As String
        SubItems(0) = Reader("ItemForMyColumn")
        SubItems(1) = Reader("ItemForSomeOtherColumn")
        MyListView.Items.Add(New ListViewItem(SubItems))
    End While

提前致谢!

2 个答案:

答案 0 :(得分:3)

尝试访问示例的SubItems(“MyColumn”)部分的Text属性时,可能会抛出空引用异常。

在尝试从中读取Text属性之前,您可以检查MyListViewItem.SubItems(“MyColumn”)是否为空。

也可能(根据您的编辑)您用来查找它的名称与SubItems列表中的名称不匹配。

如果您使用索引打印您要查找的名称,您会看到什么?

编辑后

我可能错了,但看起来像是使用constructor作为ListViewItem,它只会设置Text属性。

我建议在ListViewItem的初始化代码中尝试类似的东西

(原谅我,我的VB真的很生锈,我没有打开VS)

While Reader.Read
   Dim listViewItem As New ListViewItem()

   Dim subItem1 As New ListViewSubItem()
   subItem.Text = Reader("ItemForMyColumn")
   subItem1.Name = "MyColumn"

   //Do this as many times as you need

   listViewItem.SubItems.Add( subItem1 )

   MyListView.Items.Add( listViewItem )    
End While

答案 1 :(得分:0)

我认为你可以通过以下名称得到任何subitems

动态add columns

ListView1.Column.Add(dr("attribute_name"),dr("attribute_label"),dr("attribute_width"))

然后获得任何subitems

ListView1.SelectedItems.Item(0).SubItems(ListView1.Column("attribute_name").Index).Text