有人可以解释为什么为运行时创建的ListBox(或其他控件)指定DataSource不起作用吗?
此代码:
Dim LB As New ListBox
Dim DT As New DataTable
DT.TableName = "Colors"
DT.Columns.Add("color")
DT.Rows.Add("red")
DT.Rows.Add("blue")
DT.Rows.Add("green")
LB.DataSource = DT
Debug.Print(CType(LB.DataSource, DataTable).TableName)
Debug.Print(DT.Rows.Count)
Debug.Print(LB.Items.Count)
生成此输出:
Colors
3
0
没有生成错误,拾取了DataTable的名称,但没有行作为项添加到ListBox中!
答案 0 :(得分:0)
在显示某些内容之前,数据源似乎无法读取。只要将控件添加到表单中,列表框就具有数据表中的值。请注意,这可能不是您想要的,因为数据表似乎与ListBox不兼容。它将Object返回给字符串数据而不是值。然而,List(Of String)是兼容的,并且可以执行您想要的操作。
答案 1 :(得分:0)
Listbox
除了并显示类对象,尤其是覆盖ToString
函数的对象 - 这告诉它要显示什么。它可以保存List(Of myClass)
作为数据源。
示例:
Public Class myClass
Public Property owner As String
Public Property title As String
Public Overrides Function ToString() As String
Return String.Format("{0} - {1}", Me.Owner, Me.title)
End Function
End Class
答案 2 :(得分:0)
喜欢这个..
LB.DataSource = DT
LB.DisplayMember = "Color"
Me.Controls.Add(LB)