Динамическая генерация форм в ASP.NET - PullRequest
8 голосов
/ 27 апреля 2009

Я хотел бы динамически генерировать форму из базы данных в ASP.NET, каков наилучший подход? Могу ли я использовать какие-либо встроенные функции?

У меня будут таблицы базы данных для представления панелей и их названий, затем для каждой панели они будут содержать различные поля и их типы (комбинации, текстовые поля и т.

Пожалуйста, совет, спасибо.

Примечание. Я должен использовать элементы управления Telerik Ajax для генерации формы

1 Ответ

14 голосов
/ 27 апреля 2009

Посмотрите на Динамические данные .

Я недавно узнал об этом, и это уже спасло мне лот времени.

Обновление:

Извинения - перечитав вопрос, я не думаю, что это то, что вы хотели.

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

Пара предложений:

  • Я бы посмотрел на использование отражения для загрузки элементов управления, а не на большие операторы case. Таким образом, вы можете динамически добавлять различные типы элементов управления, просто добавляя новую сборку. Вам не придется писать новый код.
  • Убедитесь, что вы включили способ управления порядком отображения в вашей базе данных. Отмечу, что вы хотите использовать разные таблицы для каждой панели элементов управления. Я бы посоветовал против этого из-за проблемы порядка отображения. Если у вас есть таблица со списком панелей и таблица со списком элементов данных + ссылками внешнего ключа на панели, вы сможете упорядочить их на странице предсказуемым и контролируемым образом.

Обновление: больше информации об отражении

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

Так что, если у вас есть запись в вашей базе данных, похожая на следующую:

FieldName    DataType         DisplayControl                       DisplayProperty
----------------------------------------------------------------------------------
FirstName    System.String    System.Web.UI.WebControls.TextBox    Text

Вы можете использовать некоторый код, подобный следующему, чтобы сгенерировать элемент управления на странице (обратите внимание, что он не проверен):

// after getting the "PageItem" database records into a "pageItems" array
foreach (PageItem p in pageItems)
{
    // get the type and properties
    Type controlType = System.Type.GetType(p.DisplayControl)
    PropertyInfo[] controlPropertiesArray = controlType.GetProperties();

    // create the object
    object control = Activator.CreateInstance(controlType);

    // look for matching property
    foreach (PropertyInfo controlProperty in controlPropertiesArray)
    {
        if (controlPropertiesArray.Name == p.DisplayProperty)
        {
            // set the Control's property
            controlProperty.SetValue(control, "data for this item", null);
        }
    }

    // then generate the control on the page using LoadControl (sorry, lacking time to look that up)

Есть действительно хорошая страница, в которой описано, как это сделать здесь . Похоже, это то, что вам нужно.

...