0

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

4

3 回答 3

0

似乎直到有要显示的内容才会读取数据源。将控件添加到表单后,列表框就具有数据表中的值。请注意,这可能仍然不是您想要的,因为数据表似乎与 ListBox 不兼容。它将对象返回到字符串数据而不是值。但是, List(Of String) 是兼容的,并且会执行您想要的操作。

于 2013-06-30T00:45:11.053 回答
0

Listbox确实 except 和 display 类对象,尤其是那些覆盖函数的对象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
于 2013-06-30T01:46:30.553 回答
0

像这样 ..

LB.DataSource = DT
LB.DisplayMember = "Color"
Me.Controls.Add(LB)
于 2013-06-30T04:28:34.057 回答