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

C# 在C中从数据库条目动态加载用户控件#,c#,winforms,dynamic,user-controls,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 我

在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,我不喜欢

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


谢谢

您可以将类名存储在数据库中,并通过反射执行它们。它们需要全部实现一个接口或全部派生自基类(我假设您正在扩展控制),以便在不必以不同方式处理每个单独的类的情况下进行处理。

在某些方面,切换(可能在枚举上,而不仅仅是在id上)是相当合理的。您可以将程序集限定名推送到DB中,但是DB关心程序集或类什么?重构时会发生什么?迁移到java?需要支持多个UI引擎吗?不,我可能只是切换自己-用工厂方法封装它

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

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

谢谢!我想可能是这样,但我想核实一下。