我有一个带有几个组合框列的DGV。这些列绑定到基本上是数据库中查找项的对象。我想为我的用户提供一个空白选项,将这些查找项设置为NULL。我尝试过将一个空项添加到列表中以允许用户选择空值的各种方法,但它似乎不起作用。
有什么最佳方法可以让我将列表绑定到控件,并且允许用户输入空值而不必按Ctrl+0?
Public Class RootItem
Public Overridable Property Lookup
Public Overridable Property Type as String
Public Overridable Property Active as Boolean
End Class
Public Class LookupItem
Public Overridable Property ID As Integer = -1
Public Overridable Property Abbreviation As String = ""
Public Overridable Property Name As String = ""
Public Overridable Property Description As String = ""
Public Overrides Function ToString() As String
Return Abbreviation
End Function
Public Overridable ReadOnly Property Self
Get
Return Me
End Get
End Property
End Class
' My databinding
' ...
private rootItems as IList(of RootItem) = session.QueryOver(of RootItem).List
Private lookups As IList(Of LookupItem) = session.QueryOver(Of LookupItem).List
With LookupItemColumn
.DataSource = lookupItems
.DataPropertyName = PropUtil.GetName(Of RootItem)(Function(x) x.LookupItem)
.DisplayMember = PropUtil.GetName(Of LookupItem)(Function(x) x.Abbreviation)
.ValueMember = PropUtil.GetName(Of LookupItem)(Function(x) x.Self)
End With
myDgv.DataSource = New SortableBindingList(Of RootItem)(rootItems)发布于 2013-12-16 03:37:43
这个问题的解决方案是让我绑定到ComboBoxes的所有项实现一个LookupItem接口。
在此之后,我获取了要绑定到的每个项目列表,并添加了一个“虚拟”项。
然后,我处理了CellValueChanged事件,并使用一些反射来检测被编辑的列是否为ComboBoxColumn,如果是,它将获得该列绑定到的属性,并确定它现在设置的值是否为我的虚拟项(我使用一个空ID确定了这个值)。如果是空项,则将该属性的值(再次使用反射)设置为Null。这样,用户可以轻松地将属性设置为null,并且我的对象仍然被正确地持久化到数据库。添加更多列也不太困难,因为它只需要实现LookupItem接口。
https://stackoverflow.com/questions/20593475
复制相似问题