我正在基于EAV类型架构中保存的一组元数据动态创建捕获表单。
我的麻烦在于将数据加载回控件,特别是winforms组合框。
还将Entity Framework用于绑定到控件的数据。
检查是否存在控件,否则创建。为每个映射属性设置其值。 即Datasource,DisplayMember,ValueMember等......
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 :(得分:0)
搞定了。问题是控件在表单上呈现之前不会被初始化,因此即使设置了数据源,也不会收集任何项目。
首先构建动态表单,然后通过再次遍历控件来填充保存值...不优雅但它可以工作,直到我有另一个解决方案。