Динамическая загрузка пользовательских элементов управления из записей базы данных в C # - PullRequest
1 голос
/ 10 марта 2009

В C #, приложении Windows Forms, у нас есть ряд пользовательских элементов управления, которые связаны с записями пунктов меню в базе данных ...

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

Несколько пользовательских элементов управления ...

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

В настоящее время мы просто включаем идентификатор, но это кажется очень примитивным способом для достижения этой цели и имеет много жестко идентифицированных идентификаторов, что мне не нравится.

Каков наиболее подходящий способ чтения записей базы данных и загрузки соответствующего пользовательского элемента управления?

Спасибо!

Ответы [ 3 ]

2 голосов
/ 10 марта 2009

В некотором смысле, переключение (возможно, в enum, а не просто в id) вполне разумно. Вы можете вставить в базу данных имена с указанием сборок, но какое отношение БД уделяет сборкам или классам? А что происходит при рефакторинге? Переехать в Яву? Нужно поддерживать несколько движков пользовательского интерфейса? Нет, я бы, наверное, просто переключился сам - в заводском методе для его инкапсуляции ...

public static Control CreateControl(ControlType controlType) {
    switch(controlType) {
        case ControlType.Foo:
            return new blah...
        case ControlType.Bar:
            ...
    }
    throw new ArgumentOutOfRangeException();
}
1 голос
/ 10 марта 2009

Вы можете хранить имена классов в базе данных и копировать их через отражение. Все они должны были бы реализовать интерфейс или все происходить из базового класса (который, как я предполагаю, вы делаете, расширяя Control), чтобы иметь дело без необходимости по-разному обрабатывать каждый отдельный класс.

0 голосов
/ 10 марта 2009

Вероятно, вы можете сохранить имя типа в базе данных и использовать отражение для обновления ваших пользовательских элементов управления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...