首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DataGridViewComboBoxCell空值

DataGridViewComboBoxCell空值
EN

Stack Overflow用户
提问于 2013-12-15 10:25:13
回答 1查看 1.2K关注 0票数 2

我有一个带有几个组合框列的DGV。这些列绑定到基本上是数据库中查找项的对象。我想为我的用户提供一个空白选项,将这些查找项设置为NULL。我尝试过将一个空项添加到列表中以允许用户选择空值的各种方法,但它似乎不起作用。

有什么最佳方法可以让我将列表绑定到控件,并且允许用户输入空值而不必按Ctrl+0?

代码语言:javascript
复制
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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-16 03:37:43

这个问题的解决方案是让我绑定到ComboBoxes的所有项实现一个LookupItem接口。

在此之后,我获取了要绑定到的每个项目列表,并添加了一个“虚拟”项。

然后,我处理了CellValueChanged事件,并使用一些反射来检测被编辑的列是否为ComboBoxColumn,如果是,它将获得该列绑定到的属性,并确定它现在设置的值是否为我的虚拟项(我使用一个空ID确定了这个值)。如果是空项,则将该属性的值(再次使用反射)设置为Null。这样,用户可以轻松地将属性设置为null,并且我的对象仍然被正确地持久化到数据库。添加更多列也不太困难,因为它只需要实现LookupItem接口。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20593475

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档