如何持久显示与数据库中的C#类属性关联的显示属性?

时间:2011-11-28 17:33:53

标签: c# forms design-patterns dynamic

所以这是我面临的当前问题:

  1. 我有从XML Schema动态生成的C#业务对象类。

  2. 我动态构建表单以显示和捕获绑定到Business Objects的数据。

  3. 我将序列化(xml)对象存储到数据库中。

  4. 我需要保留与我的商家中每个属性相关联的显示属性 对象C#类(如何完成这个?)

  5. 假设我有一个人事业务对象:

    public class Person
    {
       public string Name {get;set;}
       public PhoneType Phone {get;set;}
    }
    
    public class PhoneType
    {
       public string HomePhone{get;set;}
       public string WorkPhone{get;set;}
    }
    

    现在假设我创建了一个新人:

    Person me = new Person();
    me.Name = "BOB";
    me.Phone = new PhoneType()
    me.Phone.HomePhone = "1234";
    me.Phone.WorkPhone = "4321";
    

    现在,当我构建表单时,我知道Person.Name是Width = 300和Height = 30的TextBox 我的PhoneType.HomePhone和PhoneType.WorkPhone是宽度为200且高度为30的文本框。

    在DataBase中保留这些显示属性并将它们与Business Objects中的每个属性相关联的最佳方法是什么?考虑到我的大多数Business Objects都是由非常深的对象图表示的...所以我想知道根据我的模型的深层次性质,从数据库中递归存储和重新生成显示属性的最佳方法是什么。

    现在有几个条件: - 我不想存储静态表单,因为我的应用程序非常动态。 XSD - >代码 - >形成 - 显示属性可以是用户特定的(例如某些字段的背景颜色),因此不能只具有通用表单模板 - 我只需要一个很好的机制来将POCO属性与显示属性相关联,这样我就可以动态构建我的表单并持续更改数据库

    我正在探索在每个Business Objects中创建PropertyBag(集合)属性的可能性,并在我导航对象图时递归填充它们,但还没有走远......

1 个答案:

答案 0 :(得分:1)

我们处理这个问题的方法是为每个类提供唯一的标识符属性,然后在数据库中存储UI定义,包括必需的字段,大小,标签值等。

我们实际上也会对类中的每个属性进行属性化,以便将那些视觉上重要的属性与那些仅仅是“帮助者”的属性分开。

在运行时,我们使用反射来检索要显示的类和属性的属性,然后从数据库中获取适当的可视修饰符列表。