Vb.net 无法访问listbox项的属性值
我有一个激活了多个选择的列表框,我正在尝试读取不同的选择值 我尝试了许多片段,下面是最新的两个片段:Vb.net 无法访问listbox项的属性值,vb.net,listbox,Vb.net,Listbox,我有一个激活了多个选择的列表框,我正在尝试读取不同的选择值 我尝试了许多片段,下面是最新的两个片段: For i = 0 To ListBox1.SelectedIndices.Count MsgBox(ListBox1.Items((ListBox1.SelectedIndices(i))).value) Next For i = 0 To ListBox1.SelectedItems.Count MsgBox(ListBox1.SelectedItems(i).
For i = 0 To ListBox1.SelectedIndices.Count
MsgBox(ListBox1.Items((ListBox1.SelectedIndices(i))).value)
Next
For i = 0 To ListBox1.SelectedItems.Count
MsgBox(ListBox1.SelectedItems(i).value)
Next
由于某种原因,我选择的任何方法都无法读取任何项目的值
我的列表框是数据绑定的,所以我在一个论坛上发现,将其公开可能会解决这个问题,但事实并非如此
我犹豫不决,因为即使Intellisense也没有显示太多信息,我得到的只是:
Equals
GetHashCode
GeType
ReferenceEquals
ToString
知道我哪里出错了吗
提前谢谢
编辑:
使用数据绑定的
列表框时,这些项不是ListBoxItem
对象(您希望这些对象具有文本
和值
属性)。相反,它们是来自数据源的类型。Items
集合(及其变体,如SelectedItems
)定义为对象集合,运行时类型从数据源获取。你试过这样的东西吗
For i = 0 To ListBox1.SelectedItems.Count
MsgBox(ListBox1.SelectedItems(i).ToString())
Next
在注释中,您指出数据源是包含String
对象的DB对象。如果您有一组类,例如Person
,则可以通过以下方式获得:
For i = 0 To ListBox1.SelectedItems.Count
MsgBox(DirectCast(ListBox1.SelectedItems(i), Person).FirstName)
Next
对于每个
,只要在循环过程中所选项目集合没有更改,您也应该使用获得相同的结果
For Each p As Person in ListBox1.SelectedItems
MsgBox(p.FirstName)
Next
注意:这是未经测试的代码,因为我现在不在Visual Studio前面。
编辑:我从屏幕截图中看到,值成员
被设置为名为Id
的属性。如果这是数据库中的uniqueidentifier
列,则列表框中的运行时类型应为Guid
当您使用数据绑定的ListBox
时,这些项不是ListBoxItem
对象(您希望具有Text
和Value
属性)。相反,它们是来自数据源的类型。Items
集合(及其变体,如SelectedItems
)定义为对象集合,运行时类型从数据源获取。你试过这样的东西吗
For i = 0 To ListBox1.SelectedItems.Count
MsgBox(ListBox1.SelectedItems(i).ToString())
Next
在注释中,您指出数据源是包含String
对象的DB对象。如果您有一组类,例如Person
,则可以通过以下方式获得:
For i = 0 To ListBox1.SelectedItems.Count
MsgBox(DirectCast(ListBox1.SelectedItems(i), Person).FirstName)
Next
对于每个
,只要在循环过程中所选项目集合没有更改,您也应该使用获得相同的结果
For Each p As Person in ListBox1.SelectedItems
MsgBox(p.FirstName)
Next
注意:这是未经测试的代码,因为我现在不在Visual Studio前面。
编辑:我从屏幕截图中看到,值成员
被设置为名为Id
的属性。如果这是数据库中的uniqueidentifier
列,那么列表框中的运行时类型应该是Guid
我不太喜欢在VB中使用数据GUI工具。也就是说,我想你要找的是:
For Each dvRow As DataRowView In Me.Listbox1.SelectedItems
MessageBox.Show(dvRow("Id").ToString)
Next
如果您对姓氏字段感兴趣,请将“Id”更改为“姓氏”
另外,我使用了MessageBox.Show
而不是MsgBox
MsgBox
是VB6的遗留产品。我不太喜欢在VB中使用数据GUI工具。也就是说,我想你要找的是:
For Each dvRow As DataRowView In Me.Listbox1.SelectedItems
MessageBox.Show(dvRow("Id").ToString)
Next
如果您对姓氏字段感兴趣,请将“Id”更改为“姓氏”
另外,我使用了MessageBox.Show
而不是MsgBox
MsgBox
是VB6的遗留项。列表框中有哪些项目?(一个字符串、整数、一个数据表、一个类对象)?它们都是来自DB的字符串,我正在使用数据绑定(在弹出菜单中)在表单加载上自动填充列表框。您可以提供有关数据绑定源的详细信息吗。更好的是,向我展示将列表框绑定到数据源的代码。(listbox1的数据源是否只有一列?)?(一个字符串、整数、一个数据表、一个类对象)?它们都是来自DB的字符串,我正在使用数据绑定(在弹出菜单中)在表单加载上自动填充列表框。您可以提供有关数据绑定源的详细信息吗。更好的是,向我展示将列表框绑定到数据源的代码。(listbox1的数据源是否只有一列?)!我以前确实试过这个,但是没有DataRowView的部分,它改变了我的想法:再次感谢!工作得很有魅力!我以前确实试过这个,但是没有DataRowView的部分,它改变了我的想法:再次感谢!我感谢帮助,主要是解释,db来自一个旧软件,所以没有Guid,但我知道这与强制转换有关:我感谢帮助,主要是解释,db来自一个旧软件,所以没有Guid,我知道这与强制转换有关:D