【问题标题】:use checkedlistbox and get this result "system.data.datarowview"使用checkedlistbox并得到这个结果“system.data.datarowview”
【发布时间】:2021-06-08 08:42:15
【问题描述】:

当我使用这个简单的代码时

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.net checkboxlist


    【解决方案1】:

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

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

    Dim itemText = CheckedListBox1.CheckedItems.
                                   Cast(Of Object).
                                   Select(Function(o) CheckedListBox1.GetItemText(o))
    
    MessageBox.Show("Checked Items: " & String.Join(", ", itemText))
    

    【讨论】:

    • Cast(Of DataRowView) ?
    • @CaiusJard, GetItemTextObject 引用作为参数,因此无需转换为DataRowView 类型,尽管它不会受到伤害。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2020-11-15
      • 1970-01-01
      • 2013-03-21
      • 2016-12-10
      • 2020-02-13
      • 1970-01-01
      • 1970-01-01
      • 2015-09-05
      相关资源
      最近更新 更多