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
相关产品推荐
相关产品推荐

