首页 > 解决方案 > 使用checkedlistbox并得到这个结果“system.data.datarowview”

问题描述

当我使用这个简单的代码

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 
Button1.Click
   
    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

并等待消息我找到这个结果

Your Checked Items are : system.data.datarowview

问题是什么?

标签: vb.netcheckboxlist

解决方案


代码没有问题,只是与您的期望不匹配。此 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

推荐阅读