从C#中的数据库条目动态加载用户控件

时间:2009-03-10 14:23:14

标签: c# winforms dynamic user-controls

在C#,Windows窗体应用程序中,我们有一系列与数据库中的菜单条目记录相关联的用户控件...

    ID  Menu Title
    1   User Management
    4   Group Management
    6   System Utilities
    12  Configuration Management

一些用户控件......

  • UserManagement.cs
  • GroupManager.cs
  • SysUtil.cs
  • ConfigurationMan.cs

我们目前只是打开ID,但这似乎是一种非常原始的方法来实现这一点并且有很多硬编码ID,我不喜欢。

读取数据库条目并加载适当的用户控件最合适的方法是什么?

谢谢!

3 个答案:

答案 0 :(得分:2)

在某些方面,交换机(可能是枚举而不仅仅是id)非常合理。您可以将程序集限定名称推送到数据库中,但DB关心程序集或类的内容是什么?当你重构时会发生什么?转移到java?需要支持多个UI引擎吗?不,我可能只是改变自己 - 用工厂方法封装它......

public static Control CreateControl(ControlType controlType) {
    switch(controlType) {
        case ControlType.Foo:
            return new blah...
        case ControlType.Bar:
            ...
    }
    throw new ArgumentOutOfRangeException();
}

答案 1 :(得分:1)

您可以将类名存储在数据库中,并通过反射实例化它们。他们需要全部实现一个接口,或者所有都来自一个基类(我假设你正在做,扩展Control),以便处理,而不必以不同的方式处理每个单独的类。

答案 2 :(得分:0)

您可以将类型名称存储在数据库中,并使用反射来新建用户控件。