将组合框列合并到DGV中的对象(或空)

时间:2013-12-10 19:52:14

标签: .net vb.net winforms nhibernate data-binding

我过去做过类似的事情并且效果很好(除了一个稍微脏的黑客)。

我有一个对象Machine,它引用其他对象,比如Building,Level等。我在DGV中对此进行数据绑定。我将对象查找列设置为DataGridViewComboBoxColumn。我必须做一些其他帖子中提到的“Self”属性hack,以便让ComboBox返回对象本身而不是ID或其他东西。

BuildingColumn.DataSource = buildings ' Loaded in from DB
BuildingColumn.DataPropertyName = "Building" ' Machine.Building
BuildingColumn.DisplayMember = "Abbreviation" ' Abbreviation of building
BuildingColumn.ValueMember = "Self" ' A property on the Building object that returns itself

如果可能的话,我想摆脱“自我”,但这确实是次要问题。

主要问题是我在Machine.Building = Nothing的行上获得了DGV数据错误。我该如何避免这种情况?我可能还需要在ComboBox中添加一个空选项,以便用户可以根据需要清空建筑物。我认为在ComboBox的数据源中添加一个空值可以解决这两个问题,但事实并非如此。

非常感谢任何帮助:)。

1 个答案:

答案 0 :(得分:0)

事实证明这个问题与我的另一个问题有关:DataGridViewComboBoxCell Empty Value

这里的问题是由于我正在使用的O / RM:NHibernate。我检索的对象的一些子属性是代理对象,所以当我尝试将它们绑定到对象是非代理对象的组合框时,存在类型不匹配。

此问题的两个主要解决方案是使用预先获取,或为绑定的对象创建视图,以确保始终可以使用非代理对象。