1

私のセットアップは次のとおりです。 PageLoad イベントでは、次のように dropDownList を初期化します。

SONumList = new DropDownList();
SONumList.DataSource = SOList;
SONumList.DataBind();
SONumList.Height = new Unit("19px");
SONumList.SelectedIndexChanged += (ChooseSODropDown);
SONumList.AutoPostBack = true;
Panel1.Controls.Add(SONumList);

SONumList の SelectedIndex が変更されたときに発生する ChooseSODropDown イベントで、PNum という別の DropDownList を作成します。

PNumList = new DropDownList();
PNumList.DataSource = dataSource2;
PNumList.DataTextField = "Part";
PNumList.DataValueField = "Part";
PNumList.DataBind();
PNumList.Height = new Unit("19px");
PNumList.SelectedIndexChanged += ChoosePNumDropDown;
PNumList.AutoPostBack = true;
Panel1.Controls.Add(PNumList);

PNum ボックス自体は適切に表示され、データが適切にバインドされていますが、ページがポストバックしても、ChoosePNumDropDown イベントは発生しません。関数の先頭でブレークポイントを試しましたが、まったく起動しません。

別のイベント発生中のオブジェクトにイベントをバインドできない理由はありますか?

4

1 に答える 1

2

簡単にChooseSODropDown言うと、イベント ハンドラーが起動されるまでには、既存のコントロールにイベント ハンドラーをバインドするには遅すぎるということです。これは、コントロールの前の状態が OnLoad 内のビューステートから逆シリアル、その初期状態を使用してonchangeイベントが発生するためです。

のイベント ハンドラーを含む OnLoad のすべてのコントロールを初期化し、ChoosePNumDropDown必要なロジックをそのイベント ハンドラーに移動する必要があると思います。私の知る限り、既存のイベント ハンドラー内にさらにイベント ハンドラーを追加して、同じポストバックで発生することを期待する方法はありません。

イベントがどのように処理されるかを正確に理解するために、ページのライフサイクルを読むことをお勧めします。

于 2012-06-04T21:46:52.903 に答える