Посмотрите на Динамические данные .
Я недавно узнал об этом, и это уже спасло мне лот времени.
Обновление:
Извинения - перечитав вопрос, я не думаю, что это то, что вы хотели.
Если вы хотите динамически генерировать форму на основе записей в вашей базе данных, вам, возможно, придется написать собственный движок.
Пара предложений:
- Я бы посмотрел на использование отражения для загрузки элементов управления, а не на большие операторы 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)
Есть действительно хорошая страница, в которой описано, как это сделать здесь . Похоже, это то, что вам нужно.