You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VB.NET绑定DataTable到ComboBox取List(Of Note)触发转换异常如何解决

问题根源

你创建DataTable的NoteList列时没有显式指定数据类型,DataColumn默认使用System.String作为类型,你存入的List(Of Note)对象会被自动调用ToString()转为字符串存储,所以读取时取到的是字符串而非原本的List对象,自然无法转换。你遇到的报错信息里的字符串,其实就是List(Of Note)对象调用默认ToString()方法的输出结果,刚好验证了数据被转成字符串存储的问题。

解决方案

第一步:修正DataTable列定义

给NoteList列显式指定数据类型为List(Of Note),修改后的初始化代码如下:

Private Table As New DataTable
Public Sub New()
    With Table
        .Columns.Add("Name") ' 名称列默认用String类型符合需求
        ' 显式指定音符列表列的类型为自定义List类型
        .Columns.Add("NoteList", GetType(List(Of Note)))
        .Rows.Add("GOT", GOT)
        .Rows.Add("Yesterday", Yesterday)
    End With
End Sub

第二步:获取选中值的两种实现方式

方式1:直接使用SelectedValue(推荐)

修正列类型后你原来的取值代码就可以正常运行了:

Dim songToPlay As List(Of Note) = CType(ComboSongs.SelectedValue, List(Of Note))

方式2:从选中行对象读取(兼容性更好)

如果遇到复杂绑定场景下SelectedValue仍有异常,可以直接读取选中的DataRowView对象取值:

Dim selectedRow As DataRowView = CType(ComboSongs.SelectedItem, DataRowView)
Dim songToPlay As List(Of Note) = CType(selectedRow("NoteList"), List(Of Note))

内容的提问来源于stack exchange,提问作者meridas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 15:36:00