0

3 つのドロップダウン リストがあり、リストで選択した値に応じて動的コントロールを作成します。すべてが正しく表示されますが、動的に作成されたボタンをクリックすると、イベントが発生しません。DDL から値を取得する必要があるため、Page_LoadComplete を使用して動的コントロールを作成しています。これがボタン イベントが発生しない理由ですか?

        protected void Page_LoadComplete(object sender, EventArgs e)
    {
        queries = new clsFormQueries();

        if (HttpContext.Current.User.IsInRole("Admin"))
        {
            if (!Page.IsPostBack)
            {
                List<Sport> sports = ComboBoxOptions.getSports();
                DropDownList temp = (DropDownList)loginView2.FindControl("Sport");
                temp.DataSource = sports;
                temp.DataTextField = "Name";
                temp.DataValueField = "id";
                temp.DataBind();

                DropDownList teamsDD = (DropDownList)loginView2.FindControl("Team");

                List<Team> teamsList = ComboBoxOptions.getTeamsBySportId(Convert.ToInt32(temp.SelectedValue));
                teamsDD.DataSource = teamsList;
                teamsDD.DataTextField = "fullName";
                teamsDD.DataValueField = "teamId";
                teamsDD.DataBind();

                DropDownList existingPlayers = (DropDownList)loginView2.FindControl("ExistingPlayers");

                List<Player> players = ComboBoxOptions.getPlayersBySport(Convert.ToInt32(temp.SelectedValue), Convert.ToInt32(teamsDD.SelectedValue));
                existingPlayers.DataSource = players;
                existingPlayers.DataTextField = "fullName";
                existingPlayers.DataValueField = "playerid";
                existingPlayers.DataBind();


                //if (existingPlayers.SelectedValue != "" && temp.SelectedValue != "")
                //{

                //    DataTable updates = queries.GetPlayerUpdate(Convert.ToInt32(existingPlayers.SelectedValue), Convert.ToInt32(temp.SelectedValue));
                //    if (updates.Rows.Count > 0)
                //        CreateUpdatesHTML(updates);
                //}

            }

            DropDownList temp2 = (DropDownList)loginView2.FindControl("Sport");
            DropDownList existingPlayers2 = (DropDownList)loginView2.FindControl("ExistingPlayers");
            if (existingPlayers2.SelectedValue != "" && temp2.SelectedValue != "")
            {

                DataTable updates = queries.GetPlayerUpdate(Convert.ToInt32(existingPlayers2.SelectedValue), Convert.ToInt32(temp2.SelectedValue));
                if (updates.Rows.Count > 0)
                    CreateUpdatesHTML(updates);
            }

        }



    }


private void CreateUpdatesHTML(DataTable updates)
    {

        foreach (DataRow update in updates.Rows)
        {
            int playerUpdateId = (int)update["playerUpdateId"];
            string updateText = update["PlayerUpdate"].ToString();

            TextBox tb = new TextBox();
            tb.ID = "UpdateText" + playerUpdateId;
            tb.TextMode = TextBoxMode.MultiLine;
            tb.Rows = 5;
            tb.Text = updateText;
            tb.CssClass = "span5";

            Button btnDelete = new Button();
            btnDelete.Click += new EventHandler(btnDelete_Click);
            btnDelete.ID = "Delete"+playerUpdateId.ToString();
            btnDelete.Text = "Delete";
            btnDelete.CssClass = "btn btn-info";

            Button btnUpdate = new Button();
            btnUpdate.Click += new EventHandler(btnUpdate_Click);
            btnUpdate.ID = "Update"+playerUpdateId.ToString();
            btnUpdate.Text = "Update";
            btnUpdate.CssClass = "btn btn-info";

            HtmlGenericControl div2 = new HtmlGenericControl("div");
            div2.Attributes.Add("class", "pull-right span5");

            div2.Controls.Add(btnDelete);
            div2.Controls.Add(btnUpdate);

            HtmlGenericControl hr = new HtmlGenericControl("hr");
            HtmlGenericControl br = new HtmlGenericControl("br");           
            existingUpdates.Controls.Add(tb);
            existingUpdates.Controls.Add(div2);
            existingUpdates.Controls.Add(br);
            existingUpdates.Controls.Add(hr);

        }
    }
4

1 に答える 1

0

私の推測では、Page_LoadComplete イベントのロジックを if(!Page.IsPostBack) 内にラップしているため、ボタンをクリックするとポストバックが発生するため、動的に作成されたコントロールが適切に再作成されない (読み取り: クリック イベント処理なし)配線されています)。動的コントロールを再作成し、それらのイベントを結び付ける Page_LoadComplete (非ポストバックまたはポストバック) のすべての呼び出しにロジックが必要です。

于 2013-06-17T03:12:39.440 に答える