用于在运行时生成的控件的VB.Net数据源

时间:2013-06-29 23:59:56

标签: vb.net runtime datasource

有人可以解释为什么为运行时创建的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中!

3 个答案:

答案 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)