我創建了一個包含歌曲音符串列的資料表:
Private Table As New DataTable
Public Sub New()
With Table
.Columns.Add("Name")
.Columns.Add("NoteList")
.Rows.Add("GOT", GOT)
.Rows.Add("Yesterday", Yesterday)
End With
End Sub
GOT 和 Yesterday 是筆記串列(筆記是一個包含筆記、持續時間等的類。)然后在表單上我將資料表分配給一個組合框:
ComboSongs.DisplayMember = Songs.DataTable.Columns(0).ColumnName
ComboSongs.ValueMember = Songs.DataTable.Columns(1).ColumnName
ComboSongs.DataSource = Songs.DataTable
我嘗試獲取這樣的筆記串列:
Dim songToPlay As List(Of Note) = CType(ComboSongs.SelectedValue, List(Of Note))
當我嘗試獲取串列時,出現錯誤:
System.InvalidCastException: '無法將'System.String' 型別的物件轉換為'System.Collections.Generic.List`1[test.Note]'。'
現在我不確定我哪里出錯了。這樣做的正確方法是什么?
uj5u.com熱心網友回復:
您的 ValueMember 是通過 ComboBox.SelectedValue 回傳的內容。所以既然你這樣設定 ValueMember
ComboSongs.ValueMember = Songs.DataTable.Columns(1).ColumnName
你只能得到 ColumnName。我假設那是一個字串,好吧,錯誤訊息告訴你它是一個
... 無法轉換型別為“System.String”的物件 ...
我想應該是“NoteList”,因為它會被回傳 Songs.DataTable.Columns(1).ColumnName
但這一切都沒有多大意義,因為我猜您正在那里選擇一首歌曲,“昨天”或“GOT”。在這一點上,回傳 DataTable 行并為它們編制索引非常復雜。您將需要按名稱查找行,當您可以創建具有強名稱的類時,這太復雜了。我會給你一個基于類的解決方案,但我不確定你是否可以做出改變。
Private Class Song
Public Property Name As String
Public Property NoteList As List(Of Note)
End Class
Private Class Note
' your implementation
End Class
Dim songs As New List(Of Song)()
songs.Add(New Song() With {.Name = "GOT", .NoteList = New List(Of Note)})
songs.Add(New Song() With {.Name = "Yesterday", .NoteList = New List(Of Note)})
' need to populate those NoteLists first
ComboSongs.DisplayMember = "Name"
ComboSongs.DataSource = songs
Dim songToPlay = songs.SingleOrDefault(Function(s) s.Name = ComboSongs.SelectedValue)
Dim noteList = songToPlay.NoteList
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/320891.html
標籤:网络
上一篇:前100個自然數之和
