【问题标题】:Dynamic Form Generation in ASP.NETASP.NET 中的动态表单生成
【发布时间】:2010-10-21 23:50:26
【问题描述】:

我想从 ASP.NET 中的数据库动态生成表单,最好的方法是什么?有没有我可以使用的内置功能?

我将有数据库表来表示面板及其名称,然后对于每个面板,它包含不同的字段及其类型(组合、文本框等)。

请指教,谢谢。

注意:我必须使用 Telerik Ajax 控件来生成表单

【问题讨论】:

    标签: c# asp.net html dynamic-data


    【解决方案1】:

    看看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)
    

    有一个非常好的页面概述了如何做到这一点here。它看起来几乎就是你所追求的。

    【讨论】:

    • 我不熟悉反射,你能扩展你的意思吗?最好举个简单的例子?
    • 谢谢,这确实给了我一些先机,您认为我可以将 Telerik 控件与 Activator.CreateInstance 一起使用吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-15
    • 2010-10-29
    • 2012-10-30
    • 2010-10-11
    • 2015-12-16
    • 2014-08-23
    相关资源
    最近更新 更多