2009-04-27 15 views
8

Chciałbym dynamicznie generować formularz z bazy danych w ASP.NET, jakie jest najlepsze podejście? Czy są jakieś wbudowane funkcje, których mogę użyć?Dynamiczne generowanie formularzy w ASP.NET

Będę miał tabele bazy danych do reprezentowania paneli i ich nazw, a następnie dla każdego panelu zawiera on różne pola i ich typy (Combos, Textboxes itp.).

Proszę o poradę, dziękuję.

Uwaga: muszę używać formantów Telerik Ajax do generowania formularza

Odpowiedz

15

Wystarczy popatrzeć na Dynamic Data.

Niedawno dowiedziałem się o tym i już zaoszczędziło mi to lot czasu.

Aktualizacja:

Przeprosiny - po reread pytanie, ja nie sądzę, że to jest to, czego szukali.

Jeśli chcesz dynamicznie generować formularz na podstawie rekordów w bazie danych, być może trzeba będzie napisać własny silnik.

Kilka sugestii chociaż:

  • będę patrzeć na użyciu odbicia załadować kontrole zamiast dużych sprawozdania przypadku. W ten sposób można dynamicznie dodawać różne typy kontroli, dodając nowy zestaw. Nie musiałbyś pisać nowego kodu.
  • Należy podać sposób kontrolowania kolejności wyświetlania w bazie danych. Zwracam uwagę, że chcesz użyć innej tabeli dla każdego panelu elementów sterujących. Odradzam to z powodu problemu z wyświetlaniem. Jeśli posiadasz tabelę z listą paneli i tabelą z listą elementów danych + odniesienia do kluczy obcych do paneli, będziesz mógł zamówić je w przewidywalny i kontrolowany sposób na stronie.

Update: Więcej informacji na temat refleksji

Mówiąc prościej, odbicie jest, gdy dowiedziałeś się o szczegółach zespołu w czasie wykonywania. W tym przypadku sugeruję użycie refleksji do załadowania kontroli na podstawie informacji z bazy danych.

Więc jeśli miał rekord w bazie danych podobny do następującego:

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

Można użyć kodu jak poniżej, aby wygenerować kontrolę na stronie (należy pamiętać, że to niesprawdzone):

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

Istnieje naprawdę dobra strona opisująca, jak to zrobić here. Wygląda na to, o co nam chodzi.

+0

Nie jestem zaznajomiony z refleksją, czy możesz rozwinąć to, co miałeś na myśli? Najlepiej z prostym przykładem? – Joshscorp

+0

Oczywiście, zaktualizuję moją odpowiedź. – Damovisa

+0

Dzięki, że daje mi to trochę przewagi, czy myślisz, że będę mógł używać kontrolek Telerik z tą Activator.CreateInstance? – Joshscorp

Powiązane problemy