无法访问列表框项目上的属性值

时间:2012-07-22 23:57:26

标签: 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).value)
 Next

出于某种原因,我选择的任何方法都无法读取任何项目的价值

我的列表框是数据绑定的,所以我在论坛上发现将其公开可能会解决问题,但它没有

我很犹豫,因为即使智能感知没有显示太多信息,我得到的只是:

Equals
GetHashCode
GeType
ReferenceEquals
ToString

我出错的任何想法?

提前致谢

修改

enter image description here

2 个答案:

答案 0 :(得分:2)

我不是在VB中使用Data GUI工具的忠实粉丝。那就是说,我认为你在寻找的是:

For Each dvRow As DataRowView In Me.Listbox1.SelectedItems
  MessageBox.Show(dvRow("Id").ToString)
Next

如果您对“姓氏”字段感兴趣,请将“Id”更改为“姓氏”。

另外,我使用MessageBox.Show代替MsgBoxMsgBox是VB6的遗留物。

答案 1 :(得分:1)

当您使用数据绑定ListBox时,这些项目不是ListBoxItem个对象(您希望它们具有TextValue属性)。相反,它们是数据源中的类型。 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获得相同的结果。

For Each p As Person in ListBox1.SelectedItems
    MsgBox(p.FirstName)
Next

注意:这是未经测试的代码,因为我目前不在Visual Studio前面。

编辑:我从屏幕截图中看到,Value Member设置为名为Id的属性。如果这是数据库中的uniqueidentifier列,则ListBox中的运行时类型应为Guid