VB.NET 中的数据绑定到列表(自定义对象)
DataBinding to List(Of CustomObject) in VB.NET
我使用 DataTable
简单绑定 TextBox
的 Text
属性 有一段时间了:
Dim dtbData As New DataTable
' populate table
Me.BindingSource.DataSource = dtbData
txtBox.DataBindings.Clear()
txtBox.DataBindings.Add(New Binding("Text", Me.BindingSource, "OrderNumber", True))
BindingNavigator1.BindingSource = Me.BindingSource
但是,我正在尝试将其更改为使用 List(Of CustomObject)
。我只是使用 dtbData
填充 List
并将 DataSource
设置为 List
。我已经设置了一个断点,DataTable
和 List
都被填充了。如果我注释掉将 Binding
添加到 txtBox
的行,那么 BindingNavigator
将按预期工作,但如果我不理会它,绑定将不起作用。
这是我试过的方法:
Dim lstData As New List(Of CustomObject)
Dim dtbData As New DataTable
' populate table
For Each row As DataRow In dtbData.Rows
Dim obj As New CustomObject
obj.OrderNumber = CInt(row("OrderNumber"))
lstData.Add(obj)
Next
Me.BindingSource.DataSource = lstData
txtBox.DataBindings.Clear()
txtBox.DataBindings.Add(New Binding("Text", Me.BindingSource, "OrderNumber", True))
BindingNavigator1.BindingSource = Me.BindingSource
看起来应该是一样的。不过 BindingSource
不是 DataTable
,而是 List(Of CustomObject)
,所以我不确定是否需要做一些不同的事情。被绑定的 属性 名称仍然相同。我也在 Binding
中尝试了 Me.BindingSource.Current
但这也不起作用。谁能告诉我我做错了什么?
CustomObject
看起来像这样:
Public Class CustomObject
Public OrderNumber As Integer
End Class
编辑
我在绑定周围添加了一个 Try
/Catch
块,我看到以下错误消息:
无法绑定到数据源上的 属性 或列 OrderNumber。参数名称:dataMember
我只是看不出绑定到 DataTable
的 OrderNumber
列或绑定到 CustomObject
的 OrderNumber
属性 之间有什么不同.
我意识到问题出在哪里了。 OrderNumber
未定义为我的 CustomObject
的 Property
。我将定义更改为:
Public Class CustomObject
Public Property OrderNumber As Integer
End Class
现在它允许我将 TextBox
的 Text
属性 绑定到 CustomObject
的 OrderNumber
属性。
我使用 DataTable
简单绑定 TextBox
的 Text
属性 有一段时间了:
Dim dtbData As New DataTable
' populate table
Me.BindingSource.DataSource = dtbData
txtBox.DataBindings.Clear()
txtBox.DataBindings.Add(New Binding("Text", Me.BindingSource, "OrderNumber", True))
BindingNavigator1.BindingSource = Me.BindingSource
但是,我正在尝试将其更改为使用 List(Of CustomObject)
。我只是使用 dtbData
填充 List
并将 DataSource
设置为 List
。我已经设置了一个断点,DataTable
和 List
都被填充了。如果我注释掉将 Binding
添加到 txtBox
的行,那么 BindingNavigator
将按预期工作,但如果我不理会它,绑定将不起作用。
这是我试过的方法:
Dim lstData As New List(Of CustomObject)
Dim dtbData As New DataTable
' populate table
For Each row As DataRow In dtbData.Rows
Dim obj As New CustomObject
obj.OrderNumber = CInt(row("OrderNumber"))
lstData.Add(obj)
Next
Me.BindingSource.DataSource = lstData
txtBox.DataBindings.Clear()
txtBox.DataBindings.Add(New Binding("Text", Me.BindingSource, "OrderNumber", True))
BindingNavigator1.BindingSource = Me.BindingSource
看起来应该是一样的。不过 BindingSource
不是 DataTable
,而是 List(Of CustomObject)
,所以我不确定是否需要做一些不同的事情。被绑定的 属性 名称仍然相同。我也在 Binding
中尝试了 Me.BindingSource.Current
但这也不起作用。谁能告诉我我做错了什么?
CustomObject
看起来像这样:
Public Class CustomObject
Public OrderNumber As Integer
End Class
编辑
我在绑定周围添加了一个 Try
/Catch
块,我看到以下错误消息:
无法绑定到数据源上的 属性 或列 OrderNumber。参数名称:dataMember
我只是看不出绑定到 DataTable
的 OrderNumber
列或绑定到 CustomObject
的 OrderNumber
属性 之间有什么不同.
我意识到问题出在哪里了。 OrderNumber
未定义为我的 CustomObject
的 Property
。我将定义更改为:
Public Class CustomObject
Public Property OrderNumber As Integer
End Class
现在它允许我将 TextBox
的 Text
属性 绑定到 CustomObject
的 OrderNumber
属性。