2009-04-27 17 views
8

Vorrei generare dinamicamente un modulo da un database in ASP.NET, qual è l'approccio migliore? Ci sono funzionalità integrate che posso usare?Generazione dinamica di moduli in ASP.NET

Avrò tabelle di database per rappresentare i pannelli e i loro nomi, quindi per ogni pannello, contiene i diversi campi e i loro tipi (Combo, Casella di testo, ecc.).

Si prega di consulenza, grazie.

Nota: devo utilizzare i controlli Telerik Ajax per il modulo di generazione

risposta

15

Date un'occhiata al Dynamic Data.

Recentemente l'ho scoperto e mi è già stato salvato un lotto di tempo.

Aggiornamento:

Scuse - dopo aver riletto la questione, non credo che questo è quello che cercavamo.

Se si desidera generare dinamicamente il modulo in base ai record nel database, potrebbe essere necessario scrivere il proprio motore.

Un paio di suggerimenti però:

  • mi piacerebbe guardare utilizzando la riflessione di caricare i controlli, piuttosto che grandi dichiarazioni caso. In questo modo è possibile aggiungere in modo dinamico diversi tipi di controllo semplicemente includendo il nuovo assembly. Non dovresti scrivere un nuovo codice.
  • Assicurarsi di includere un modo per controllare l'ordine di visualizzazione nel database. Prendo atto che si desidera utilizzare una tabella diversa per ciascun pannello di controlli. Lo sconsiglio a causa del problema con l'ordine di visualizzazione. Se hai una tabella con un elenco di pannelli e una tabella con un elenco di elementi di dati + riferimenti a chiavi esterne ai pannelli, sarai in grado di ordinarli in modo prevedibile e controllabile sulla pagina.

Update: più informazioni riflessione

In parole povere, la riflessione è quando si scopre sui dettagli di un assembly in fase di esecuzione. In questo caso, suggerisco di utilizzare reflection per caricare un controllo in base alle informazioni nel database.

Quindi, se si ha un record nel database simile al seguente:

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

si potrebbe usare un po 'di codice come il seguente per generare il controllo della pagina (si noti che è non testato):

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

C'è una pagina veramente buona che descrive come fare questo here. Sembra essere più o meno quello che stai cercando.

+0

Non ho familiarità con la riflessione, puoi espandere ciò che volevi dire? Preferibilmente con un semplice esempio? – Joshscorp

+0

Certo, aggiornerò la mia risposta – Damovisa

+0

Grazie, mi dà un po 'di vantaggio, pensi che sarò in grado di utilizzare i controlli Telerik con Activator.CreateInstance? – Joshscorp

Problemi correlati