2009-04-27 11 views
8

ASP.NETでデータベースからフォームを動的に生成したいのですが、どのような方法が最適ですか?私が使用できる組み込みの機能はありますか?ASP.NETでの動的フォームの生成

私は、パネルとその名前を表すデータベーステーブルを持っています。次に、パネルごとに異なるフィールドとそのタイプ(コンボ、テキストボックスなど)が含まれています。

助けてください、ありがとう。

注:私はDynamic Dataを見てくださいフォーム生成

答えて

15

ためTelerik Ajaxコントロールを使用する必要があります。

私は最近それについて知っていて、それはすでにlotの時間を節約しました。

更新:

謝罪 - 質問を再読した、私は、これはあなたが後に何であったかではないと思います。

データベースのレコードに基づいてフォームを動的に生成する場合は、独自のエンジンを作成する必要があります。

しかし提案のカップル:

  • 私はコントロールではなく、大規模なcase文をロードするためにリフレクションを使用して見たいです。これにより、新しいアセンブリを追加するだけで、異なるコントロールタイプを動的に追加することができます。新しいコードを書く必要はありません。
  • データベースの表示順序を制御する方法が含まれていることを確認してください。私はあなたがコントロールの各パネルのために異なるテーブルを使用したいと思います。私は表示順序の問題のためにそれに対して助言したいと思います。パネルのリストと、データ項目のリストとパネルへの外部キーの参照を持つテーブルがある場合は、それらをページ上で予測可能かつ制御可能な方法で並べ替えることができます。

更新:あなたは、実行時にアセンブリの詳細を知るとき、反射簡単に言えば

詳細は、反射があります。この場合は、リフレクションを使用して、データベース内の情報に基づいてコントロールをロードすることをお勧めします。あなたは次のようにデータベース内のレコードがあった場合

ので:

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

ありがとう、それは私にいくつかの頭をスタートさせる、あなたはそのActivator.CreateInstanceでTelerikコントロールを使用することができると思いますか? – Joshscorp

関連する問題