8

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

パネルとその名前を表すデータベース テーブルを用意し、各パネルにさまざまなフィールドとそのタイプ (コンボ、テキスト ボックスなど) を含めます。

アドバイスください、よろしくお願いします。

注: フォーム生成には Telerik Ajax コントロールを使用する必要があります

4

1 に答える 1

14

Dynamic Dataをご覧ください。

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

アップデート:

謝罪 - 質問を読み直して、これはあなたが求めていたものではないと思います.

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

ただし、いくつかの提案があります。

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

更新: リフレクションの詳細

簡単に言うと、リフレクションとは、実行時にアセンブリの詳細を確認することです。この場合、リフレクションを使用して、データベース内の情報に基づいてコントロールを読み込むことをお勧めします。

したがって、データベースに次のようなレコードがあるとします。

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)

これを行う方法を概説している非常に優れたページがここにあります。それはあなたが求めているもののように見えます。

于 2009-04-27T04:56:59.417 に答える