2013-12-10 40 views
0

我在过去做了类似的事情,它运行良好(除了一个稍微脏乱的黑客)。Databinding combobox column to object(or null)in DGV

我有一个对象,机器,引用其他对象,如建筑,水平等。我将这个数据绑定在DGV中。我将对象查找列设置为DataGridViewComboBoxColumn。为了让ComboBox返回对象本身而不是ID或其他东西,我必须像在其他一些帖子中提到的那样执行“自我”属性hack。

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 Data Errors。我如何避免这种情况?这也可能与我想在ComboBox中添加一个空白选项有关,因此用户可以在需要时清空建筑物。我认为向ComboBox的数据源添加一个空值可以解决这两个问题,但它没有。

任何帮助将不胜感激:)。

回答

0

事实证明,这个问题涉及到我的另一个问题:DataGridViewComboBoxCell Empty Value

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

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