2009-05-25 114 views
1

我基於EAV類型架構中保存的一組元數據即時創建捕獲表單。動態窗體控件屬性

我的麻煩是將數據加載回控件,尤其是winforms組合框。

還使用實體框架綁定到控件的數據。

  1. 檢查是控制存在,否則創建。爲每個映射的屬性設置它們的值。 即數據源,DisplayMember,ValueMember等...

  2. LoadValue對於SelectedValue屬性是否存在?這是失敗的地方?

在檢查對象時,它好像沒有包括數據源的以前的值已經被加載了嗎?但組合框確實顯示了一次渲染的值?

以下是一些代碼片段。

Type oType = Type.GetType("System.Windows.Forms.ComboBox"); 
if (oControlObject == null) 
{ 
    oControlObject = (Control)Activator.CreateInstance(oType); 
    oControlObject.Tag = item; 
    oControlObject.CreateControl(); 
} 

...Loop to set Datasource, DisplayMember & ValueMember ... 

if (property.IsReadProperty.Value && value != null) 
{ 
    PropertyInfo propSet = oType.GetProperty(property.PropertyName); //PropertyName here is "SelectedValue" 
    propSet.SetValue(oControlObject, value.Value, null); 
} 
+0

那麼,如果我聲稱自己明白你的意思,我會撒謊,但是,怎麼樣投射到ComboBox而不是控制!我不知道,我可能完全錯誤。 – Galilyou 2009-05-25 11:57:22

回答

0

得到它的工作。問題在於控件在窗體上呈現之前沒有初始化,因此即使設置了數據源也沒有收集項目。

首先構建動態表單,然後通過重新遍歷控件再次填充保存值...不夠優雅,但它的工作原理,直到我有另一種解決方案。