2009-04-27 22 views
8

Me gustaría generar dinámicamente un formulario desde una base de datos en ASP.NET, ¿cuál es el mejor enfoque? ¿Hay funcionalidades integradas que pueda usar?Generación dinámica de formularios en ASP.NET

Dispondré de tablas de base de datos para representar los paneles y sus nombres, luego para cada panel, contiene los diferentes campos y sus tipos (Combos, Textboxes, etc.).

Por favor, consejo, gracias.

Nota: Tengo que usar los controles de Telerik Ajax para la forma de generación

Respuesta

15

un vistazo a Dynamic Data.

Hace poco me enteré y ya me ha guardado un lote de tiempo.

Actualización:

Disculpas - habiendo releer la pregunta, no creo que esto es lo que buscábamos.

Si desea generar dinámicamente el formulario basado en los registros en su base de datos, puede que tenga que escribir su propio motor.

Un par de sugerencias sin embargo:

  • me vería en el uso de la reflexión para cargar los controles en lugar de declaraciones de casos de gran tamaño. De esta forma, podría agregar dinámicamente diferentes tipos de control con solo incluir el nuevo ensamblaje. No tendrías que escribir un código nuevo.
  • Asegúrese de incluir una forma de controlar el orden de visualización en su base de datos. Noto que quiere usar una tabla diferente para cada panel de controles. Aconsejaría contra eso debido al problema de visualización del pedido. Si tiene una tabla con una lista de paneles y una tabla con una lista de elementos de datos + referencias de claves externas a los paneles, podrá ordenarlos de una manera predecible y controlable en la página.

Actualización: más información en la reflexión

En pocas palabras, la reflexión es cuando se enteró de los detalles de un montaje en tiempo de ejecución. En este caso, sugiero usar la reflexión para cargar un control basado en la información en su base de datos.

Así que si había un registro en su base de datos similar a la siguiente:

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

usted podría utilizar algo de código como el siguiente para generar el control de la página (tenga en cuenta que es no probado):

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

Hay una muy buena página que describe cómo hacer esto here. Parece ser más o menos lo que estás buscando.

+0

No estoy familiarizado con la reflexión, ¿puedes ampliar lo que querías decir? Preferiblemente con un simple ejemplo? – Joshscorp

+0

Claro, actualizaré mi respuesta – Damovisa

+0

Gracias, eso me da un poco de ventaja, ¿creen que podré usar los controles Telerik con ese Activador.CreateInstance? – Joshscorp

Cuestiones relacionadas