2009-02-26 365 views
4

我有一個業務對象,它是子對象的組合。
我在Visual Studio 2008中使用數據綁定綁定到Windows窗體上的控件。在DataSource上找不到DataMember屬性[ObjectName]

但是我在窗體的InitializeComponent方法中出現上述錯誤。

可以說我有一個名爲ParentObject的對象,它包含一個通用列表ChildListObject。 ParentObject也有Child對象,它本身有一個Child對象。 (即ParentObject.ChildObject.ChildObject)

我設置主綁定源:

BindingSource.Datasource = ParentObject 

我添加了一個網格,設置它的綁定源:

GridBindingSource.Datasource = ParentObject 

,並設置DataMember設置爲:

BindingSourceB.DataMember = "ChildListObject" 

現在,網格的數據源被設置爲GridBindingSource:

Me.MyDataGridView.DataSource = Me.GridBindingSource 

也有綁定到ParentObject和ParentObject.ChildObject

我已經在一個孤立的項目測試了這個屬性其他控件和它工作得很好,所以我無法找出什麼真正的錯誤是?曾經工作的代碼,會突然停止工作。

我得到的錯誤是(如果我使用的對象在上述例子中的名稱):

它失敗「成員屬性ChildObject不能 可以在數據源中發現」於:

Me.MyDataGridView.DataSource = Me.GridBindingSource 

奇怪的是,如果我刪除< System.Diagnostics.DebuggerStepThrough()>,然後當它失敗只是繼續它很好?但它在運行時仍然失敗。

有沒有人有任何想法可以指出我在正確的方向?我通過google找到的最接近的地方是它可能與生成的設計器代碼的順序有關。正在工作的代碼將會突然停止工作。


這個問題似乎來來去去。如果在錯誤發生後我才繼續,程序會繼續順利地繼續運行。可能是VS中的一個錯誤。但在運行時,錯誤仍然存​​在。

是什麼導致了這個問題?我如何阻止它發生?

回答

1

我發現這樣做的唯一的解決方法如下:

  1. 從網格中刪除所有列
  2. 添加所需的列回饋到電網(這可防止列在下一步被刪除)
  3. 刪除網格數據源
  4. 在表單加載事件中設置網格的數據源。
1

數據庫應該是一個字符串,它定義要顯示的列表的屬性。這裏不需要。

這將使意義:

BindingSourceB.Datasource = ParentObject.ChildList; 

如果綁定到一個網格,你沒有設置數據成員。只需設置Datasource,然後使用設計器來配置網格。

該GetType有幫助設計師。在設計器屬性中,您應該將BindingSourceB設置爲ChildListObject類型,然後執行上面的操作。

+0

對不起,這個例子是輕微的錯誤。我已編輯和修復。實際上在對象之間沒有,只是一個包含子對象的通用列表的父對象。 我沒有在網格上設置datamember屬性。不過謝謝你的幫助。 – ptutt 2009-02-26 02:06:58

2

只需將生成的代碼事件是這樣的:

private void MainForm_Load(object sender, EventArgs e) 
{ 
    Me.MyDataGridView.DataMember = "DataMember"; 
    Me.MyDataGridView.DataSource = "DataSource"; 
} 
3

我試了一下這個 如果您有關於它 如果基本形式和BindingSource的問題只發生在這種情況下 幾個實驗如果在與BindingSource(由BaseForm繼承)相關的InheritedForm上有其他綁定源,則您從此BaseForm 繼承一個新的InheritedForm 您有設計器錯誤。我沒有設計器解決方案,但是如果忽略並繼續 一切都會好起來,當你建立項目再次

,或者你將不得不通過代碼來設置數據成員

0

我有同樣的問題

Private WithEvents _model As MyModel 

刪除WithEvents是正常的,一切都重新工作

Private _model As MyModel 
0

由於某種原因,錯誤未在錯誤窗口中註冊,直到我手動打開第我的表單是「設計師」。一旦我打開設計器任務,我就可以看到綁定錯誤,並手動刪除。

是什麼導致這是我從我的項目中刪除數據源,但它並沒有刪除它們後面的所有代碼,我想是自動神奇的。