0


0

Gridview内のDropdownlistのイベントハンドラー

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)
{
    //
}

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

1 Answer


1


その間になんとか解決できましたか?

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

  1. 初期化

  2. Page_Load()

  3. プロセスイベント

  4. PreRender()

  5. レンダリング()

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