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.
No estoy familiarizado con la reflexión, ¿puedes ampliar lo que querías decir? Preferiblemente con un simple ejemplo? – Joshscorp
Claro, actualizaré mi respuesta – Damovisa
Gracias, eso me da un poco de ventaja, ¿creen que podré usar los controles Telerik con ese Activador.CreateInstance? – Joshscorp