4

他の更新パネルのいくつかのコントロールがバインドされている値を変更するコードがあります。このイベント ハンドラーが起動したら、他の更新パネルも強制的に更新して再バインドできるようにしたいと考えています。

これは可能ですか?

編集:

明確にするために、1 つのユーザー コントロールに更新パネルがあり、他の更新パネルは他のユーザー コントロールにあるため、いくつかのカスタム プロパティを公開して findControl などを使用しない限り、それらは互いに表示されません。

再度編集:

これが私が思いついたものです:

public void Update()
{
    recursiveUpdate(this); 
}

private void recursiveUpdate(Control control)
{
    foreach (Control c in control.Controls)
    {
        if (c is UpdatePanel)
        {
            ((UpdatePanel)c).Update();
        }

        if (c.HasControls())
        {
            recursiveUpdate(c);
        }
    }
}

更新パネルでいっぱいの 3 つのメイン ユーザー コントロールがありました。これらのコントロールはメイン ページに表示されていたので、これら 3 つの Update を呼び出す Update メソッドをそこに追加しました。

私のトリガー コントロールでは、this.Page を currentpage にキャストし、Update を呼び出しました。

編集:

あぁぁぁぁぁぁぁぁぁぁぁぁぁ!

更新パネルが更新されている間、それらのサブコントロール内で Page_Load が呼び出されません...どうすればよいでしょうか!

4

5 に答える 5

3

特定のイベントが発生したときにすべてのパネルを更新する PostBackTrigger (AsyncPostBackTrigger の代わりに) を登録するのはどうでしょうか。

または、一部の UpdatePanel を既に更新しているトリガーを他の UpdatePanel にも追加します。

于 2008-09-10T20:52:30.530 に答える
2

更新する更新パネルのイベントにトリガーを設定するか、コード ビハインドで updatepanel.update() を明示的に指定できます。

于 2008-09-10T20:52:11.950 に答える
0

Page.DataBind()は、すべての子コントロールでデータバインドのラウンドを開始します。これにより、Asp.Netは各コントロールのバインド式を再評価します。それでも不十分な場合は、ユーザーコントロールのOnDataBindingまたはOnDataBoundオーバーライドに確実にキックオフするロジックを追加できます。たとえば、Page_Loadイベントを再実行する必要がある場合は、オーバーライドされたOnDataBoundメソッドで呼び出すだけです。

于 2008-09-10T22:36:54.053 に答える
0

これは、クライアント側の Javascriptから updatepanel を更新する場合に適した手法です。

于 2008-09-10T20:54:54.267 に答える
0

両方のビュー パネルを 3 番目のプレゼンター クラスにインスタンス化します。次に、プレゼンター クラスに両方のビューを制御させます。例えば:

たとえば、「中流階級」がその仕事をするために必要なものを渡すことができます。たとえば、メインで使用できます。

PresenterClass.AttachInterface(mIOrder);
PresenterClass.DoSomeCalulation();
PresenterClass.drawPanel(1);
PresenterClass.AttachInterface(mIOtherOrder);
PresenterClass.DoSomeCalulation();
PresenterClass.drawPanel(2);

各ビューには独自のコントロールがあります。これを行うにはさまざまな方法があります..代わりに、中間クラスを使用して両方のパネルをインスタンス化し、各パネルで「メソッドを取得」して処理用のデータを取得できます。

于 2014-05-16T14:46:33.487 に答える