2013-12-10 42 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的。我檢索的對象的一些子屬性是代理對象,所以當我試圖將它們綁定到組合框時,其中的對象是非代理對象時,存在類型不匹配。

這個問題的兩個主要解決方案是使用預先獲取,或者爲綁定的對象創建一個視圖,以確保非代理對象始終可用。