1

ObjectContainerDataSource にバインドする一連のテキスト ボックスとドロップ ダウン リストを含む DetailsView を使用して Web ページを作成する必要があります。これは、InsertItemTemplate を使用した一方向バインディング用です。

静的に定義されたフィールドを使用して、テキスト ボックスとドロップダウン リストの両方でこれを簡単に機能させることができますが、私の特定の状況では、Web ページを高度に構成する必要があるため、実行時にフィールドを追加する必要があります。

テキストボックスの場合、これは BoundField クラスを介して簡単に行うことができますが、ドロップダウン リストに TemplateField を使用しようとすると、すべてがひどくうまくいきません。独自の TemplateField クラスを記述したり、CompiledBindableTemplateBuilder を使用して InsertItemTemplate を直接設定したりするなど、さまざまな方法を試しました。しかし、私が何をしても、基本的な問題は、挿入ボタンがクリックされた後、TemplateFields がオブジェクト データ ソースにバインドされないことです。これは、ポストバック時に InsertItemTemplate が null であるためだと思います (すべてのフィールドがマークアップで宣言されている場合、InsertItemTemplate は null ではないことに注意してください)。誰かが私がやろうとしていることを正確に行った場合は、返信してください.

概念実証のためにテンプレート フィールド内の単純な TextBox に戻しましたが、どちらも機能しません。下に作ったものを貼っておきます。この場合、TextBox 入力を「CustomerRef」というプロパティにバインドしようとしています。私の問題は Text プロパティの設定方法に関連している可能性があると思いますが、コード ビハインドで Text プロパティを Bind(...) に設定する他の方法を見つけることができませんでした。

これは、テンプレート化されたフィールドを挿入する方法です:

var tf = new TemplateField();
tf.InsertItemTemplate  = new CompiledBindableTemplateBuilder(delegate(Control container)
    {

        TextBox text = new TextBox();
        text.ID = "MyTextBoxId";
        text.Attributes.Add("Text", "<%# Bind(\"CustomerRef\") %>");
        container.Controls.Add(text);
    },
    delegate(Control container)
    {  // I've tried throwing an exception in here but it never gets executed

        OrderedDictionary dict = new OrderedDictionary();
        dict["CustomerRef"] = ((TextBox)container.Controls[0]).Text;
        return dict;
    });

これは、フィールドを DetailsView フィールド リストに追加する方法です。

ShipmentSearchView.Fields.Add(tf);

テキストボックスにテキストを入力して挿入ボタンを押します...次に、挿入イベントのイベントハンドラーで、次のようなデータソースを取得しようとします:

 var dataSource = e.Instance as MyClassName;

デバッグ環境のこの時点で、問題のフィールドに InsertItemTemplate がなくなっていることに気付きました。null であり、MyCustomerRef が設定されていません。

Page_Load() のさまざまな場所にフィールドを追加しようとしました-すべてのポストバックと最初のロードの両方で。Page_Init() および詳細ビューの Init() イベントで、しかし、私がそれを行う方法に違いはないようです。この問題についてご協力いただきありがとうございます。

4

1 に答える 1

0

これを実現するために、独自のカスタム ユーザー コントロールを作成することになりました。実際にはそれほど難しくありません。誰かが私のソリューションに興味を持っている場合は、ここに投稿してください。しかし、私の元の投稿に対するコメントが不足していることを考えると、私の Web ページで私が行っていることは、多くの人が試みていることではないと思います!

于 2012-02-10T00:21:00.570 に答える