我一直致力于为我的项目保持面向对象的东西。目前,我正在使用一个 .DLL,它将所有应用程序的类提供给充当表示层的 WinForms 项目。
例如,我的 .DLL 将返回一个 SortableBindingList(Of T) 以在表单中编码。SortableBindingList(Of T) 来自这里。让我们假设一个 SortableBindingList(Of Product)。假设 .DLL 的函数Services.Products.GetList()
返回一个 SortableBindingList(Of Product),我可以很容易地做到这一点:
DataGridView1.DataSource = Services.Products.GetList()
现在,DataGridView 已正确填充我的产品列表。美好的。但是,没有 .SelectedItem 属性可以让我返回在 DataGridView 中选择的对象:
' Doesn't exist!
Dim p As Product = DataGridView1.SelectedItem
' Need to make another DB call by getting the Product ID
' from the proper Cell of the DataGridView ... yuck!
但是,ComboBox 或 ListBox 实际上会完整地存储和返回我的 Product 对象:
' Valid!
ComboBox1.DataSource = Services.Products.GetList()
Dim p as Product = ComboBox1.SelectedItem
然而另一个... ComboBox 和 ListBox 不显示 Product 对象的所有字段,只显示 DisplayMember 属性的值。
VB.NET 2008 中是否有一个我只是缺少的不错的控件,它为我提供了我想要的面向对象的功能,它实际上将显示整个对象的字段并在用户选择时返回该对象?我不知道为什么没有。