ASP.NET中的动态表单生成

8
我希望能够在ASP.NET中从数据库动态生成表单,最佳方法是什么?是否有内置功能可以使用?
我将拥有用于表示面板及其名称的数据库表,然后对于每个面板,它都包含不同类型的字段及其类型(组合框、文本框等)。
请给予建议,谢谢。
注:我必须使用Telerik Ajax控件进行表单生成。
1个回答

14

可以看一下Dynamic Data

我最近发现它已经帮我节省了很多时间。

更新:

抱歉-重读问题后,我认为这不是您想要的。

如果您想根据数据库中的记录动态生成表单,则可能需要编写自己的引擎。

以下是一些建议:

  • 我会考虑使用反射来加载控件,而不是使用大型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)

这里有一个非常好的页面,详细介绍了如何做到这一点,点击这里。看起来这就是你想要的。


我不熟悉反射,你能详细解释一下你的意思吗?最好能举个简单的例子。 - Joshscorp
谢谢,这确实给了我一些起点,你认为我能够使用Telerik控件和Activator.CreateInstance吗? - Joshscorp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接