2009-04-27 4 views
8

ASP.NET의 데이터베이스에서 양식을 동적으로 생성하고 싶습니다. 어떤 방법이 가장 좋습니까? 사용할 수있는 기능이 있습니까?ASP.NET의 동적 양식 생성

나는 패널과 그 이름을 나타내는 데이터베이스 테이블을 가지게 될 것이고, 각각의 패널에 다른 필드와 타입 (콤보, 텍스트 박스 등)이 포함될 것이다.

감사합니다.

참고 : 나는 Dynamic Data에서보세요 형태로 생성

답변

15

에 대한 Telerik 아약스 컨트롤을 사용합니다.

나는 최근에 그것에 대해 알았고 이미 나를 로 많은 시간을 저장했다.

업데이트 :

죄송합니다 - 질문을 다시 읽어 데, 나는 이것이 당신이 후 무엇인지 생각하지 않습니다.

데이터베이스의 레코드를 기반으로 양식을 동적으로 생성하려면 자체 엔진을 작성해야 할 수 있습니다.

하지만 몇 가지 제안 :

  • 내가 컨트롤보다는 큰 경우 문을로드하는 반사를 사용하여보고 싶은데. 그렇게하면 새 어셈블리를 포함하여 다른 컨트롤 유형을 동적으로 추가 할 수 있습니다. 새로운 코드를 작성하지 않아도됩니다.
  • 데이터베이스에 표시 순서를 제어하는 ​​방법이 포함되어 있는지 확인하십시오. 각 컨트롤 패널에 대해 다른 테이블을 사용하려고합니다. 디스플레이 주문 문제로 인해 그 반대를 권고합니다. 패널 목록과 데이터 항목 목록 및 패널에 대한 외래 키 참조가있는 표가있는 경우 페이지에서 예측 가능하고 제어 가능한 방식으로 항목을 주문할 수 있습니다.

업데이트 : 런타임에서 어셈블리의 세부 사항에 대해 알아 때 반사 간단히 말하면

에 대한 추가 정보는, 반사이다. 이 경우 리플렉션을 사용하여 데이터베이스의 정보를 기반으로 컨트롤을로드하는 것이 좋습니다.

그래서 당신은 다음과 같은 데이터베이스의 레코드가 있다면 :

:

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

당신은 페이지의 컨트롤을 생성하기 위해 다음 (가 안된입니다 참고) 같은 일부 코드를 사용할 수를

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

이 작업을 수행하는 방법에 대한 개요 페이지가 정말 있습니다. here. 당신이 겪은 일로 꽤나 보입니다.

+0

나는 반사에 익숙하지 않다. 당신이 의미하는 바를 확장 할 수 있습니까? 가급적 간단한 예제가 있습니까? – Joshscorp

+0

물론, 나는 나의 대답을 업데이트 할 것이다 – Damovisa

+0

고마워, 그다지 나에게 시작을 안겨 주겠다. 나는 Activer.CreateInstance로 Telerik 컨트롤을 사용할 수있을 것이라고 생각하니? – Joshscorp