C# ASP.NET中的动态表单生成

C# ASP.NET中的动态表单生成,c#,asp.net,html,dynamic-data,C#,Asp.net,Html,Dynamic Data,我想从ASP.NET中的数据库动态生成表单,最好的方法是什么?是否有我可以使用的内置功能 我将有数据库表来表示面板及其名称,然后对于每个面板,它包含不同的字段及其类型(组合框、文本框等) 请指教,谢谢 注意:我必须使用Telerik Ajax控件生成表单看看 我最近发现了这一点,这已经为我节省了很多时间 更新: 抱歉-重读了这个问题,我认为这不是你想要的 如果要根据数据库中的记录动态生成表单,可能需要编写自己的引擎 不过有几点建议: 我将考虑使用反射来加载控件,而不是使用大型case语句。这样

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

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

请指教,谢谢

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

看看

我最近发现了这一点,这已经为我节省了很多时间

更新:

抱歉-重读了这个问题,我认为这不是你想要的

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

不过有几点建议:

  • 我将考虑使用反射来加载控件,而不是使用大型case语句。这样,只需包含新程序集,就可以动态添加不同的控件类型。您不必编写新代码
  • 确保在数据库中包含控制显示顺序的方法。我注意到您希望为每个控件面板使用不同的表。由于陈列顺序的问题,我建议不要那样做。如果您有一个包含面板列表的表和一个包含数据项列表+对面板的外键引用的表,您将能够在页面上以可预测和可控的方式对它们进行排序
更新:更多关于反射的信息

简单地说,反射就是在运行时发现程序集的详细信息。在本例中,我建议使用反射根据数据库中的信息加载控件

因此,如果您的数据库中有类似于以下内容的记录:

FieldName    DataType         DisplayControl                       DisplayProperty
----------------------------------------------------------------------------------
FirstName    System.String    System.Web.UI.WebControls.TextBox    Text
您可以使用以下代码在页面上生成控件(请注意,它未经测试):


有一个非常好的页面,概述了如何做到这一点。它看起来和你想要的差不多。

我不熟悉反射,你能详细说明你的意思吗?最好用一个简单的例子?谢谢,这确实给了我一些领先的机会,你认为我能在Activator.CreateInstance上使用Telerik控件吗?
// 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)