动态表单控件属性

时间:2009-05-25 11:43:04

标签: c# winforms reflection

我正在基于EAV类型架构中保存的一组元数据动态创建捕获表单。

我的麻烦在于将数据加载回控件,特别是winforms组合框。

还将Entity Framework用于绑定到控件的数据。

  1. 检查是否存在控件,否则创建。为每个映射属性设置其值。 即Datasource,DisplayMember,ValueMember等......

  2. SelectedValue属性是否存在负载值?这是失败的地方?

  3. 在检查对象时,似乎没有包含数据源的先前值已​​经加载了吗?但是组合框确实显示了曾经渲染过的值吗?

    以下是代码的一些片段。

    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);
    }
    

1 个答案:

答案 0 :(得分:0)

搞定了。问题是控件在表单上呈现之前不会被初始化,因此即使设置了数据源,也不会收集任何项目。

首先构建动态表单,然后通过再次遍历控件来填充保存值...不优雅但它可以工作,直到我有另一个解决方案。