0

RowDataBound イベントで Gridview に Dropdownlist を追加しました。コードは次のとおりです。

if (e.Row.RowType == DataControlRowType.DataRow)
{
    DropDownList ddlSeason = new DropDownList();

    ddlSeason.DataSourceID = "odsRoomSeason";
    ddlSeason.DataTextField = "SeasonTittle";
    ddlSeason.DataValueField = "SeasonID";
    ddlSeason.AutoPostBack = true;
    ddlSeason.SelectedIndexChanged += new EventHandler(ddlSeason_SelectedIndexChanged);

    TableCell tcSeason= new TableCell();

    tcSeason.Controls.Add(ddlSeason);
    e.Row.Cells.AddAt(e.Row.Cells.Count, tcSeason);
}

追加したイベント ハンドラーは次のとおりです。

protected void ddlSeason_SelectedIndexChanged(object sender, EventArgs e)
{
    //
}

しかし問題は、イベント ハンドラー関数がイベントをキャッチしないことです。正しいイベント ハンドラーの書き方を教えてください。また、ドロップダウン リストのイベントが発生した行を取得する必要があります。

4

1 に答える 1

1

その間、これを解決できましたか?

イベントが発生するにグリッドを DataBind() してください。動的に作成されたコントロールがその瞬間に存在する場合にのみ、ASP.NET はイベントを正しくディスパッチできます。ポスト バック後のページ ライフ サイクルは、おおよそ次のようになります。

  1. 初期化
  2. Page_Load()
  3. イベントを処理する
  4. PreRender()
  5. 与える()

したがって、PreRender 以降でのみ動的コントロールを生成したときに、同様の問題が発生しました。これは、これらのステップの前にイベントが処理されるためです。ページのライフ サイクル中に2 回でもグリッドを DataBind() する必要がある場合があります。Pag​​e_Load() で 1 回、イベントを処理してモデルを更新した後、新しいモデルの状態を反映するために PreRender() で別の DataBind() を実行します。

于 2010-05-10T06:52:02.240 に答える