2009-05-25 2 views
1

Я создаю форму захвата «на лету» на основе набора метаданных, хранящихся в схеме типа EAV.Свойства управления динамическими формами

Моя проблема заключается в загрузке данных обратно в элемент управления и, в частности, в combobox winforms.

Также с использованием Entity Framework для данных, привязанных к элементу управления.

  1. Проверка контроля есть, иначе создать. для каждого отображаемого свойства задают свои значения. т. Е. Источник данных, DisplayMember, ValueMember и т. Д.

  2. Значение Load существует для свойства SelectedValue? это где не удается?

При осмотре объекта кажется, что ни одно из предыдущих значений, включая источник данных, еще не загружено? Но combobox действительно показывает значения после рендеринга?

Ниже приведены некоторые фрагменты кода.

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

+0

В этот момент я взаимодействую с объектом с использованием отражения, поэтому отливка не должна иметь значения. Но хорошее предложение. Попытайтесь все равно, не знаете? –

ответ

0

Получил его работу. Проблема в том, что элемент управления не инициализируется до тех пор, пока он не будет отображаться в форме, поэтому не будет собираться элементов, даже если источник данных установлен.

Сначала создайте динамическую форму, а затем запишите значения сохранения, итерации через элементы управления снова ... не изящно, но он работает, пока у меня не будет другого решения.

Смежные вопросы