我试过这个,但它给了我'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
提前致谢!
答案 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