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、クラス オブジェクト、特に関数をオーバーライドするクラス オブジェクトを除外し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 に答える