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.
Nie jestem zaznajomiony z refleksją, czy możesz rozwinąć to, co miałeś na myśli? Najlepiej z prostym przykładem? – Joshscorp
Oczywiście, zaktualizuję moją odpowiedź. – Damovisa
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