使用checkedlistbox并得到这个结果“system.data.datarowview”

问题描述

大家好,当我使用这个简单的代码

Private Sub Button1_Click(ByVal sender As System.Object,ByVal e As System.EventArgs) 处理 Button1.点击

    Dim cheq As New System.Text.StringBuilder
    For Each item In CheckedListBox1.CheckedItems
        cheq.Append(item)
        cheq.Append(" ")

    Next
    MessageBox.Show(" Your Checked Items are : " & cheq.ToString())
       End Sub

并等待我发现此结果的消息:“您检查的项目是:system.data.daTarowview”

有什么问题?

解决方法

代码没有问题,只是与您的期望不符。此 CheckedListBox 绑定到数据表。当控件绑定到数据表时,它实际上附加到了 DefaultView 属性公开的 DataView,而一个 DataView 是 DataRowView 的集合

大概您想访问底层 DataRow,可通过 DataRowView 的 Row 属性访问。这可能是不必要的;您可以像获取 DataRow 一样从 DataRowView 中获取值;如果您的 DataRow 代表一个带有 Name 列的人,那么其中任何一个都会为您提供姓名:

DirectCast(DirectCast(item,DataRowView)("Name"),String)
DirectCast(DirectCast(item,DataRowView).Row("Name"),String)

或者稍微整理一下:

For Each item In CheckedListBox1.CheckedItems.Cast(Of DataRowView)
    cheq.Append(item("SOME_COLUMN_NAME_HERE"))
    cheq.Append(" ")

Next
,

当你绑定一个 DataTable 时,数据来自它的 DefaultView,它是一个 DataViewDataView 中的每一项都是一个 DataRowView,并且与大多数类型一样,在一个类型上调用 ToString 只会返回类型名称。

您可能正在设置 DisplayMemberCheckedListBox 以指定应从 DataTable 的哪一列提取值以显示在控件中。如果您真正想要的是为项目显示的文本,那么您应该调用 GetItemText 方法:

Dim itemText = CheckedListBox1.CheckedItems.
                               Cast(Of Object).
                               Select(Function(o) CheckedListBox1.GetItemText(o))

MessageBox.Show("Checked Items: " & String.Join(",",itemText))

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...