Как найти динамически созданный CheckBoxList внутри Ajax TabContainer? - PullRequest
0 голосов
/ 05 января 2019

У меня есть веб-форма, где пользователь вводит идентификатор своего сотрудника в текстовое поле, нажимает кнопку поиска, а затем выбирает свое имя из результатов поиска (список переключателей). Как только они выбирают свое имя, TabContainer становится видимым со многими вкладками. На каждой вкладке есть список флажков с серией задач, которые они выбирают по мере их выполнения. Завершив выбор элементов, они нажимают кнопку «Отправить», чтобы сохранить записи в базе данных. Кнопка CheckBox List и Submit создаются динамически при выборе новой вкладки. Список CheckBox корректно заполняется на каждой вкладке, и создается кнопка «Отправить». Однако при нажатии кнопки обработчик событий не срабатывает.

Чтобы устранить неполадки, я жестко запрограммировал кнопку внутри панелей вкладок (вместо динамического создания кнопки отправки), и обработчик событий срабатывает, но код не выполняется, когда он пытается отправить данные в базу данных, говоря «Список флажков». нулевой. Я попытался найти список флажков, но он не найден. После прочтения множества подобных вопросов здесь и в других местах, я полагаю, что это потому, что он не существует на момент отправки. Что мне нужно сделать, чтобы найти кнопку «Отправить» и список флажков при нажатии кнопки?

Вот мой код:

 protected void tabTaskContainer__ActiveTabChanged(object sender, EventArgs e)
{

        CheckBoxList cbl = new CheckBoxList();
        cbl.ID = "cblCat";
        this.tabTaskContainer.ActiveTab.Controls.Add(cbl);

        //run query to populate checkboxlist
        int category = tabTaskContainer.ActiveTabIndex;

        using (MySqlConnection conn = new MySqlConnection())
        {
            conn.ConnectionString = "connection_string_here";
            using (MySqlCommand cmd = new MySqlCommand())
            {
                cmd.CommandText = "select t2.employee_id, t1.task as 'task',t1.task_id as 'task_id', ifnull(t2.is_complete,0) as 'completed'" +
                                   " from" +
                                   " (select task_id, task" +
                                   " from hot_tasks" +
                                   " where responsibility = 'new-hire'" +
                                   " and category_id = " + category + ") t1" +
                                   " left join" +
                                   " (select employee_id, task_id, is_complete" +
                                   " from completed_hot" +
                                   " where employee_id = @employeeID) t2 on t1.task_id = t2.task_id;";

                cmd.Parameters.AddWithValue("@employeeID", Convert.ToInt64(txtEmpID.Text));

                cmd.Connection = conn;
                conn.Open();
                using (MySqlDataReader sdr = cmd.ExecuteReader())
                {

                    while (sdr.Read())
                    {
                        ListItem item = new ListItem();
                        item.Text = sdr["task"].ToString();
                        item.Value = sdr["task_id"].ToString();
                        item.Selected = Convert.ToBoolean(sdr["completed"]);
                        cbl.Items.Add(item);
                    }
                }

            }
            conn.Close();
        }


    Button btnSubmit = new Button();
    btnSubmit.ID = "btnSubmit";
    btnSubmit.Text = "Submit";
    btnSubmit.CausesValidation = false;
    btnSubmit.Click += new System.EventHandler(btnSubmit_Click);

    tabTaskContainer.ActiveTab.Controls.Add(btnSubmit);

}

И код для кнопки Отправить:

 protected void btnSubmit_Click(object sender, EventArgs e)
{

    CheckBoxList cbList = tabTaskContainer.FindControl("cblCat") as CheckBoxList;
    if(cbList != null)
        {

        using (MySqlConnection conn = new MySqlConnection())
        {

            conn.ConnectionString = "server=connection string here";
            using (MySqlCommand cmd = new MySqlCommand())
            {
                cmd.CommandText = "INSERT INTO completed_hot (employee_id, task_id, date_completed, is_complete, empID_taskID) " +
                                    "VALUES(@empid, @taskid, curdate(), @isCompleted, CONCAT(@empID,@taskID)) " +
                                    "ON DUPLICATE KEY UPDATE " +
                                    "date_completed = curdate(), is_complete = @isCompleted;";
                cmd.Connection = conn;
                conn.Open();
                foreach (ListItem item in cbList.Items)
                {
                    cmd.Parameters.Clear();
                    cmd.Parameters.AddWithValue("@empID", rblSearchResults.SelectedValue);
                    cmd.Parameters.AddWithValue("@taskID", item.Value);
                    cmd.Parameters.AddWithValue("@isCompleted", item.Selected);
                    cmd.ExecuteNonQuery();

                }
                conn.Close();
            }
        }
        tabTaskContainer.ActiveTab = tabTaskContainer.Tabs[tabTaskContainer.ActiveTabIndex + 1];
    }
}
...